#include <bits/stdc++.h> #define COUNT(v, x) upper_bound(v.begin(), v.end(), x)-lower_bound(v.begin(), v.end(), x) using namespace std; int N; int A[36]; vector<int> B; vector<int> C[36]; int xor_sum; void rec(int pos, int lim, int delta) { if(0<=pos-delta && pos-delta<N) C[pos-delta].push_back(xor_sum); if(pos==lim) return; if(!B.empty()) { xor_sum^=B.back(); B.back()+=A[pos]; xor_sum^=B.back(); rec(pos+delta, lim, delta); xor_sum^=B.back(); B.back()-=A[pos]; xor_sum^=B.back(); } B.push_back(A[pos]); xor_sum^=B.back(); rec(pos+delta, lim, delta); xor_sum^=B.back(); B.pop_back(); } int main() { scanf("%d", &N); for(int i=0; i<N; i++) scanf("%d", A+i); if(N==1) { if(A[0]==0) printf("1\n"); else printf("0\n"); return 0; } int M=N/2; rec(0, M, 1); rec(N-1, M-1, -1); for(int i=0; i<N; i++) sort(C[i].begin(), C[i].end()); long long ans=0; for(auto& it: C[M-1]) ans+=COUNT(C[M], it); for(int l=M-1; l>=0; l--) for(int r=M; r<N; r++) { int x=0; for(int i=l; i<=r; i++) x+=A[i]; vector<int> a, b; if(l-1>=0) a=C[l-1]; else a.push_back(0); if(r+1<N) b=C[r+1]; else b.push_back(0); for(auto& it: a) ans+=COUNT(b, it^x); } printf("%lld\n", ans); return 0; }