← Home
#include <bits/stdc++.h>
using namespace std;
 
#define MAXN 1001000
int arr[MAXN];
int px[MAXN];
#define MAXID (MAXN*21)
int trie[MAXID][2];
int mx[MAXID];
 
int id=0;
 
void insert(int nd, int v, int i) {
    for(int j=19;j>=0;j--) {
        int cur=(v>>j)&1;
        if(trie[nd][cur]<0) {
            trie[nd][cur]=++id;
            mx[id]=i;
        }
        nd=trie[nd][cur];
    }
}
 
void merge(int a, int b) {
    for(int i=0;i<2;i++) {
        if(trie[b][i]<0) continue;
        if(trie[a][i]<0) {
            trie[a][i]=trie[b][i];
        } else merge(trie[a][i], trie[b][i]);
    }
}
 
int search(int nd, int vx, int vmx) {
    int ans=0;
    for(int j=19;j>=0;j--) {
        int cur=(vmx>>j)&1;
        int cx=(vx>>j)&1;
        if(cur==1&&trie[nd][cx]>=0) {
            ans=max(ans, mx[trie[nd][cx]]);
        }
        cur^=cx;
        if(trie[nd][cur]<0) {
            return ans;
        }
        nd=trie[nd][cur];
    }
    return ans;
}
 
int32_t main() {
    memset(trie, 0xff, sizeof(trie));
    cin.tie(nullptr);
    ios::sync_with_stdio(false);
    int n;
    cin >> n;
    for(int i=1;i<=n;i++) cin >> arr[i];
    px[0]=0;
    for(int i=1;i<=n;i++) px[i]=px[i-1]^arr[i];
    vector<pair<int, int>> vc;
    vector<pair<int, int>> nvc;
    int ans=0;
    for(int i=n;i>=1;i--) {
        vc.push_back({(1<<20)-1, ++id});
        insert(id, px[i], i);
        nvc.clear();
        for(auto pr : vc) {
            pr.first&=arr[i];
            if(nvc.empty()||nvc.back().first!=pr.first) {
                nvc.push_back(pr);
            } else {
                merge(nvc.back().second, pr.second);
            }
        }
        vc=nvc;
        for(auto pr : vc) {
            int mxi=search(pr.second, px[i-1], pr.first);
            if(mxi) {
                ans=max(ans, mxi-i+1);
                break;
            }
        }
    }
    cout << ans << endl;
    return 0;
}