#include <cstdio> #include <vector> #include <algorithm> #include <vector> #include <unordered_map> using namespace std; vector<vector<int> > gen(vector<int> A) { vector<vector<int> > gener; gener.push_back(vector<int>(1,0)); for (int i=0;i<A.size();i++) { gener.push_back(vector<int>()); int cur = A[i]; for (int j=i;j>=0;j--) { for (int k: gener[j]) gener.back().push_back(cur^k); if (j) cur+=A[j-1]; } } return gener; } int N; int A[50]; int xo[50]; int main() { scanf("%d",&N); for (int i=1;i<=N;i++) scanf("%d",&A[i]); for (int i=1;i<=N;i++) xo[i] = xo[i-1]+A[i]; if (N<=20) { vector<int> has; for (int i=1;i<=N;i++) has.push_back(A[i]); auto num = gen(has); long long ans = 0; for (int i: num[N]) if (i==0) ans+=1; printf("%lld\n",ans); } else { vector<int> has; for (int i=1;i<=18;i++) has.push_back(A[i]); auto one = gen(has); has.clear(); for (int i=N;i>=19;i--) has.push_back(A[i]); auto twoV = gen(has); vector<unordered_map<int,int> > two; for (auto v: twoV) { two.push_back(unordered_map<int,int>()); for (int x: v) two.back()[x]+=1; } long long ans = 0; for (int i: one.back()) ans+=two.back()[i]; for (int i=18;i>0;i--) for (int j=19;j<=N;j++) for (int k: one[i-1]) ans+=two[N-j][k^(xo[j]-xo[i-1])]; printf("%lld\n",ans); } return 0; }