#include <bits/stdc++.h>
using namespace std;

const int MAXN = 500 + 10;

vector<int> C[MAXN];
int vis[1 << 20], dp[1 << 20];
int cas;

int solve(const vector<int> &S) {
    int n = S.size(), mx = 0;
    if (n == 0) return 0;
    dp[0] = 0; vis[0] = ++ cas;
    for (int i = 0; i < n; ++ i) {
        int msk = 1 << (S[i]);
        for (int x = mx; x >= 0; -- x) {
            if (vis[x] != cas || (x & (msk - 1))) continue;
            int y = x + msk;
            if (vis[y] != cas) vis[y] = cas, dp[y] = dp[x] + 1, mx = max(mx, y);
            else dp[y] = max(dp[y], dp[x] + 1);
        }
    }
    int ret = 1;
    for (int x = 0; x <= mx; ++ x) {
        if (vis[x] == cas && __builtin_popcount(x) == 1) ret = max(ret, dp[x]);
    }
    return ret;
}

int main() {
    for (int N; scanf("%d", &N) == 1 && N; ) {
        for (int i = 0; i < MAXN; ++ i) C[i].clear();
        for (int i = 0; i < N; ++ i) {
            int x; scanf("%d", &x);
            int p = x;
            while (p % 2 == 0) p /= 2;
            C[p].push_back(__builtin_ctz(x / p));
        }
        int ret = 1;
        for (int i = 0; i < MAXN; ++ i) {
            ret = max(ret, solve(C[i]));
        }
        printf("%d\n", ret);
    }
    return 0;
}
