// Author: wlzhouzhuan
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;

#define ll long long 
#define rint register int 
#define rep(i, l, r) for (rint i = l; i <= r; i++)
#define per(i, l, r) for (rint i = l; i >= r; i--)
#define mset(s, _) memset(s, _, sizeof(s))
#define pb push_back
#define pii pair <int, int>
#define mp(a, b) make_pair(a, b)

inline int read() {
  int x = 0, neg = 1; char op = getchar();
  while (!isdigit(op)) { if (op == '-') neg = -1; op = getchar(); }
  while (isdigit(op)) { x = (x << 3) + (x << 1) + op - '0'; op = getchar(); }
  return neg * x;
}

int N, a, opt, target, ans;

int main(){
    scanf("%d", &N);
    for(int i=1; i<=N; i++){
        scanf("%d", &opt);
        a=log2(opt);
        if((1<<a)<opt){
            if(target>a)   target=a;
            else        a++;

        }
        if(a>target)   ans+=a-target, target=a;
        if(a<target)   target=a;
    }
    printf("%d", ans);
    return 0;
}

/*
const int N = 100005;
const int mod = 1e9 + 7;
int a[N], n, ans;
int inv[N];

ll fac(int n) {
  ll res = 1;
  for (rint i = 1; i <= n; i++) {
    res = 1ll * res * i % mod;
  }
  return res;
}

int main() {
  n = read();
  inv[1] = 1;
  for (rint i = 2; i <= n; i++) {
    inv[i] = 1ll * inv[mod % i] * (mod - mod / i) % mod;
  }
  for (rint i = 2; i <= n; i++) {
    inv[i] = (inv[i] + inv[i - 1]) % mod;
  }
  for (rint i = 1; i <= n; i++) {
    a[i] = read();
    if (i > 1) {
      ans += 1ll * (a[i] - a[i - 1]) * inv[i - 1] % mod;
      if (ans > mod) ans -= mod;
    }
  }
  printf("%lld\n", 1ll * ans * fac(n - 1) % mod);
  return 0;
}*/ 
### Prompt

In Cpp, your task is to solve the following problem:

There are A slimes lining up in a row. Initially, the sizes of the slimes are all 1.

Snuke can repeatedly perform the following operation.

* Choose a positive even number M. Then, select M consecutive slimes and form M / 2 pairs from those slimes as follows: pair the 1-st and 2-nd of them from the left, the 3-rd and 4-th of them, ..., the (M-1)-th and M-th of them. Combine each pair of slimes into one larger slime. Here, the size of a combined slime is the sum of the individual slimes before combination. The order of the M / 2 combined slimes remain the same as the M / 2 pairs of slimes before combination.



Snuke wants to get to the situation where there are exactly N slimes, and the size of the i-th (1 ≤ i ≤ N) slime from the left is a_i. Find the minimum number of operations required to achieve his goal.

Note that A is not directly given as input. Assume A = a_1 + a_2 + ... + a_N.

Constraints

* 1 ≤ N ≤ 10^5
* a_i is an integer.
* 1 ≤ a_i ≤ 10^9

Input

Input is given from Standard Input in the following format:


N
a_1 a_2 ... a_N


Output

Print the minimum number of operations required to achieve Snuke's goal.

Examples

Input

2
3 3


Output

2


Input

4
2 1 2 2


Output

2


Input

1
1


Output

0


Input

10
3 1 4 1 5 9 2 6 5 3


Output

10

### Response

```cpp
// Author: wlzhouzhuan
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;

#define ll long long 
#define rint register int 
#define rep(i, l, r) for (rint i = l; i <= r; i++)
#define per(i, l, r) for (rint i = l; i >= r; i--)
#define mset(s, _) memset(s, _, sizeof(s))
#define pb push_back
#define pii pair <int, int>
#define mp(a, b) make_pair(a, b)

inline int read() {
  int x = 0, neg = 1; char op = getchar();
  while (!isdigit(op)) { if (op == '-') neg = -1; op = getchar(); }
  while (isdigit(op)) { x = (x << 3) + (x << 1) + op - '0'; op = getchar(); }
  return neg * x;
}

int N, a, opt, target, ans;

int main(){
    scanf("%d", &N);
    for(int i=1; i<=N; i++){
        scanf("%d", &opt);
        a=log2(opt);
        if((1<<a)<opt){
            if(target>a)   target=a;
            else        a++;

        }
        if(a>target)   ans+=a-target, target=a;
        if(a<target)   target=a;
    }
    printf("%d", ans);
    return 0;
}

/*
const int N = 100005;
const int mod = 1e9 + 7;
int a[N], n, ans;
int inv[N];

ll fac(int n) {
  ll res = 1;
  for (rint i = 1; i <= n; i++) {
    res = 1ll * res * i % mod;
  }
  return res;
}

int main() {
  n = read();
  inv[1] = 1;
  for (rint i = 2; i <= n; i++) {
    inv[i] = 1ll * inv[mod % i] * (mod - mod / i) % mod;
  }
  for (rint i = 2; i <= n; i++) {
    inv[i] = (inv[i] + inv[i - 1]) % mod;
  }
  for (rint i = 1; i <= n; i++) {
    a[i] = read();
    if (i > 1) {
      ans += 1ll * (a[i] - a[i - 1]) * inv[i - 1] % mod;
      if (ans > mod) ans -= mod;
    }
  }
  printf("%lld\n", 1ll * ans * fac(n - 1) % mod);
  return 0;
}*/ 
```