//Mobius_Treap #include<bits/stdc++.h> using namespace std; typedef pair<int,int> II; typedef vector< II > VII; typedef vector<int> VI; typedef vector< VI > VVI; typedef long long int LL; #define PB push_back #define MP make_pair #define F first #define S second #define SZ(a) (int)(a.size()) #define ALL(a) a.begin(),a.end() #define SET(a,b) memset(a,b,sizeof(a)) #define si(n) scanf("%d",&n) #define dout(n) printf("%d\n",n) #define sll(n) scanf("%lld",&n) #define lldout(n) printf("%lld\n",n) #define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL) #define TRACE #ifdef TRACE #define trace(...) __f(#__VA_ARGS__, __VA_ARGS__) template <typename Arg1> void __f(const char* name, Arg1&& arg1){ cerr << name << " : " << arg1 << std::endl; } template <typename Arg1, typename... Args> void __f(const char* names, Arg1&& arg1, Args&&... args){ const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...); } #else #define trace(...) #endif //FILE *fin = freopen("in","r",stdin); //FILE *fout = freopen("out","w",stdout); const int N = 38; map<int,map<int,int> >Y; map<int,VI> X; map<int,int>cnt; int A[N]; int main() { int n;si(n); for(int i=0;i<n;i++) si(A[i]); int l = n/2; int r = n-n/2; for(int i=0;i<(1<<l);i++) { int sum=0; int j; for(j = l-1;j>=0;j--) { if((1<<j)&i) sum+=A[j]; else break; } int idx = sum; sum=0; int add=0; for(int k = 0;k<=j;k++) { if((1<<k)&i) sum+=A[k]; else { sum+=A[k]; add ^= sum; sum=0; } } X[idx].PB(add); } for(int i=0;i<(1<<(r-1));i++) { int sum=0; int j; for(j = 0;j<r;j++) { sum+=A[l+j]; if((1<<j)&i); else break; } int idx = sum; sum=0; int add=0; for(int k = j+1;k<r;k++) { if((1<<k)&i) sum+=A[l+k]; else { sum+=A[l+k]; add^=sum; sum=0; } } Y[idx][add]++; } LL ans=0; for(auto it=X.begin();it!=X.end();it++) { int y = it->F; for(auto it2 = it->S.begin();it2!=it->S.end();it2++) { int x = *it2; for(auto it3 = Y.begin();it3!=Y.end();it3++) { int x1 = it3->F; ans += it3->S[x^(y+x1)]; } } } lldout(ans); return 0; }