#include<bits/stdc++.h> using namespace std; #define sd(x) scanf("%d",&x) #define slld(x) scanf("%lld",&x) #define LL long long #define LD long double #define PB push_back #define MP make_pair #define F first #define S second #define Fill(a, b) memset(a, b, sizeof(a)) #define INF 2000000009 typedef pair<int,int> PII; typedef vector<int> VI; #define N 38 LL ar[N],sum[N]; map<LL,LL> mp[N]; vector<LL> vec[N]; void solve() { int n,m; LL xr,sm=0,ans=0,val; sd(n); sum[0] = 0; for(int i=1;i<=n;i++) { slld(ar[i]); sum[i] = sum[i-1] + ar[i]; } sum[n+1] = sum[n]; m=n/2; vec[0].PB(0); vec[n+1].PB(0); mp[0][0] = 1; mp[n+1][0] = 1; //cout<<m<<endl; for(int i=1;i<=m;i++) { xr = ar[i]; for(int j=i-1;j>=0;j--) { for(int k=0;k<vec[j].size();k++) { val = vec[j][k]^xr; if(mp[i][val] == 0) { vec[i].PB(val); } mp[i][val] += mp[j][vec[j][k]]; //cout<<i<<" "<<xr<<" "<<val<<endl; } xr = (xr+ar[j]); } } //cout<<endl; for(int i=n;i>m;i--) { xr = ar[i]; for(int j=i+1;j<=n+1;j++) { for(int k=0;k<vec[j].size();k++) { val = vec[j][k]^xr; if(mp[i][val] == 0) { vec[i].PB(val); } mp[i][val] += mp[j][vec[j][k]]; //cout<<i<<" "<<xr<<" "<<val<<endl; } xr = (xr+ar[j]); } } //cout<<endl; for(int i=0;i<m;i++) { for(int j=m;j<=n;j++) { //if(i==m && j==m)continue; sm = sum[j] - sum[i]; //cout<<i<<" "<<j<<" "<<sm<<endl; for(int k=0;k<vec[i].size();k++) { val = sm^vec[i][k]; ans += (mp[i][vec[i][k]] * mp[j+1][val]); //cout<<ans<<" "<<mp[i][vec[i][k]]<<endl; } } } printf("%lld\n",ans); } int main() { int t=1; //scanf("%d",&t); for(int i=1;i<=t;i++) { solve(); } }