#include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <string> using namespace std; vector< pair<long long, long long> > v; vector< pair<long long, long long> > v2; vector<long long> aux1,aux2; int main(){ ios::sync_with_stdio(0); int N; cin >> N; int a[N]; for(int i = 0;i < N;++i) cin >> a[i]; if(N == 1){ cout << 1 << endl; return 0; } int N1 = N / 2,N2 = (N + 1) / 2; v.push_back(make_pair(0,a[0])); for(int i = 1;i < N1;++i){ v2.clear(); int m = v.size(); for(int j = 0;j < m;++j){ pair<long long,long long> cur = v[j]; v2.push_back(make_pair(cur.first,cur.second + a[i])); v2.push_back(make_pair(cur.first ^ cur.second,a[i])); } v = v2; } /*for(int i = 0;i < (1 << (N1 - 1));++i){ cout << v[i].first << " " << v[i].second << endl; }*/ long long nways = 0; for(int suffix = 0;suffix <= N2;++suffix){ //cout << "suffix = " << suffix << endl; long long sum = 0; for(int i = 0;i < suffix;++i) sum += a[N1 + i]; aux1.clear(); aux2.clear(); for(int i = 0;i < v.size();++i) aux1.push_back(v[i].first ^ (v[i].second + sum)); if(suffix == N2) aux2.push_back(0); else{ for(int mask = 0;mask < (1 << (N2 - suffix - 1));++mask){ long long result = 0; for(int i = 0,sum2 = 0;i < N2 - suffix;++i){ sum2 += a[N1 + suffix + i]; //cout << N1 + suffix + i << " " << result << " " << sum2 << endl; if(i == N2 - suffix - 1 || (mask >> i & 1)){ result ^= sum2; sum2 = 0; } } //cout << "mask = " << mask << ", result = " <<result << endl; aux2.push_back(result); } } /*for(int i = 0;i < aux1.size();++i) cout << aux1[i] << " "; cout << endl; for(int i = 0;i < aux2.size();++i) cout << aux2[i] << " "; cout << endl;*/ sort(aux1.begin(),aux1.end()); sort(aux2.begin(),aux2.end()); for(int p1 = 0,p2 = 0;p1 < aux1.size();){ long long val = aux1[p1]; int equal = 0; while(p2 < aux2.size() && aux2[p2] < val) ++p2; if(p2 < aux2.size() && aux2[p2] == val){ int e = p2; while(e < aux2.size() && aux2[e] == val) ++e; equal = e - p2; p2 = e; } int e = p1; while(e < aux1.size() && aux1[e] == val) ++e; nways += (long long)(e - p1) * equal; p1 = e; } } cout << nways << endl; return 0; }