#include<bits/stdc++.h> #define pb push_back #define mp make_pair using namespace std; vector<long long> in; long long fn(long long N){ long long n=N/2-1,x,ans,out=0,y=0; vector<long long> vec[2]; for(long long j=0;j<2;j++){ long long bitmask=0; if(j==1){ n = N-N/2-1; y = N/2; } while(bitmask++<(1<<n)){ ans=0; x=in[0+y]; for(long long i=0;i<n;i++){ if((1<<i)&bitmask){ x+=in[i+1+y]; } else{ ans^=x; x=in[i+1+y]; } } ans^=x; vec[j].pb(ans); } } map<long long,long long> mymap1,mymap2; for(long long i=0;i<2;i++){ for(long long j=0;j<vec[i].size();j++){ if(i==0) mymap1[vec[i][j]]++; else mymap2[vec[i][j]]++; } } for(map<long long,long long>::iterator e=mymap1.begin();e!=mymap1.end();++e){ if(mymap2.find(e->first)!=mymap2.end()){ out+=e->second*mymap2[e->first]; } } //cout<<out<<endl; return out; } int main(){ long long N; cin>>N; long long arr[N]; for(long long i=0;i<N;i++){ cin>>arr[i]; } long long sm[N+1]; sm[0]=0; for(long long i=1;i<=N;i++){ sm[i]=arr[i-1]+sm[i-1]; } //cout<<sm[N/2]<<endl; for(long long i=0;i<N;i++){ in.pb(arr[i]); } long long out1=0; out1+=fn(in.size()); //cout<<out1<<endl; while(1){ N=in.size(); vector<long long> in2; for(long long i=0;i<N/2-1;i++){ in2.pb(in[i]); } in2.pb(in[N/2-1]+in[N/2]); for(long long i=N/2+1;i<N;i++){ in2.pb(in[i]); } in=in2; //for(long long i=0;i<in.size();i++){ // cout<<in[i]<<" "; //} //cout<<"\n"; out1+=fn(in.size()); if(in.size()==1) break; } cout<<out1; return 0; }