#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<pii> vii;
typedef vector<pll> vll;
#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
#define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
#define all(x) (x).begin(),(x).end()
#define pb push_back
#define ff first
#define ss second
#define mp make_pair

const int bity = 23;
const int N = (1 << bity);

int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);

    int n; cin >> n;

    vi t(n);
    for(int i = 0; i < n; i++) cin >> t[i];

    vector<vi> pom(bity + 2);
    for(int i = 1; i <= bity + 1; i++){
        pom[i].resize(1 << (i - 1), 0);
    }

    for(int i = 0; i < n; i++){
        int p = t[i], msb = 0;
        for(int j = bity + 1; j > 0; j--){
            if(p & (1 << (j - 1))){
                msb = j; break;
            }
        }
        if(msb > 0){
            int zero = (~p) & ((1 << (msb - 1)) - 1);
            pom[msb][zero] = 1;
        }
    }
    
    for(int msb = 1; msb <= bity + 1; msb++){
        int max_mask = 1 << (msb - 1);
        for(int b = 1; b < msb; b++){
            for(int mask = max_mask - 1; mask >= 0; mask--){
                if(mask & (1 << (b - 1))){
                    pom[msb][mask ^ (1 << (b - 1))] += pom[msb][mask];
                }
            }
        }
    }

    vi dp(N, 0);
    dp[0] = 1;
    for(int i = 1; i < N; i++){
        int msb = 0;
        for(int j = bity + 1; j > 0; j--){
            if(i & (1 << (j - 1))){
                msb = j; break;
            }
        }
        int prev = i ^ (1 << (msb - 1));
        if(prev < (1 << (msb - 1))){
            if(pom[msb][prev] && dp[prev]) dp[i] = 1;
        }
    }

    int wyn = 0;
    for(int i = 1; i < N; i++){
        if(dp[i]) wyn = max(wyn, __builtin_popcount(i));
    }
    cout << wyn;

    return 0;
}
