Bessie and the cows have recently been playing with "cool" sequences and are trying to construct some. Unfortunately they are bad at arithmetic, so they need your help!

A pair (x, y) of positive integers is "cool" if x can be expressed as the sum of y consecutive integers (not necessarily positive). A sequence (a1, a2, ..., an) is "cool" if the pairs (a1, a2), (a2, a3), ..., (an - 1, an) are all cool. 

The cows have a sequence of n positive integers, a1, a2, ..., an. In one move, they may replace some ai with any other positive integer (there are no other limits on the new value of ai). Determine the smallest number of moves needed to make the resulting sequence cool.

Input

The first line contains a single integer, n (2 ≤ n ≤ 5000). The next line contains n space-separated integers, a1, a2, ..., an (1 ≤ ai ≤ 1015).

Please do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64d specifier.

Output

A single integer, the minimum number of ai that must be changed to make the sequence cool.

Examples

Input

3
6 4 1


Output

0


Input

4
20 6 3 4


Output

2

Note

In the first sample, the sequence is already cool, so we don't need to change any elements. In the second sample, we can change a2 to 5 and a3 to 10 to make (20, 5, 10, 4) which is cool. This changes 2 elements.
#include <bits/stdc++.h>
using namespace std;
const int N = 5005;
const int INF = 0x3f3f3f3f;
int n;
long long a[N], g[2][N];
int dp[2][N];
inline long long read() {
  long long f = 1, x = 0;
  char ch = getchar();
  while (ch > '9' || ch < '0') {
    if (ch == '-') f = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9') {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  return f * x;
}
inline void upd(int& x, int y) { x = min(x, y); }
inline long long f(long long x) {
  if (x % 2 == 0) return x / 2;
  return x;
}
int main() {
  n = read(), a[0] = 1;
  for (int i = (n), iend = (1); i >= iend; i--) a[i] = read();
  dp[0][0] = 0, g[0][0] = 1;
  for (int i = (1), iend = (n); i <= iend; i++) {
    for (int j = (0), jend = (i); j <= jend; j++) dp[i & 1][j] = INF;
    for (int j = (0), jend = (i - 1); j <= jend; j++) {
      int t = i & 1;
      if ((2 * a[i]) % g[t ^ 1][j] == 0 &&
          (2 * a[i] / g[t ^ 1][j]) % 2 != g[t ^ 1][j] % 2)
        upd(dp[t][i], dp[t ^ 1][j]), g[t][i] = a[i];
      upd(dp[t][j], dp[t ^ 1][j] + 1), g[t][j] = f(g[t ^ 1][j]);
    }
  }
  int ans = INF;
  for (int i = (0), iend = (n); i <= iend; i++) upd(ans, dp[n & 1][i]);
  printf("%d", ans);
  return 0;
}
