#include <bits/stdc++.h> using namespace std; #define X first #define Y second #define INPUT freopen("world.inp","r",stdin) #define OUTPUT freopen("world.out","w",stdout) #define FOR(i,l,r) for(auto i=l;i<=r;i++) #define REP(i,l,r) for(auto i=l;i<r;i++) #define FORD(i,l,r) for(auto i=l;i>=r;i--) #define REPD(i,l,r) for(auto i=l;i>r;i--) #define ENDL printf("\n") #define debug 1 typedef long long ll; typedef pair<int,int> ii; const int inf=1e9; const int MOD=1e9+7; const int N=20; ll lsum[N],rsum[N]; vector <ll> lb[N],rb[N]; int a[N<<1],n; void prepare(){ scanf("%d",&n); REP(i,0,n) scanf("%d",a+i); } ll solve(){ int m=n/2; // cout<<m<<'\n'; FOR(j,0,n-m-1){ FOR(i,0,j) rsum[j]+=a[m+i]; REP(i,0,1<<(n-m-j-2)){ ll cur,fin=0; REP(k,0,n-m-j-1){ cur=a[m+j+k+1]; while (i&(1<<k)) k++,cur+=a[m+j+k+1]; fin^=cur; } rb[j].push_back(fin); // printf("%d %d %lld\n",j,i,fin); } if (j==n-m-1) rb[j].push_back(0); sort(rb[j].begin(),rb[j].end()); } FOR(j,0,m){ REP(i,0,j) lsum[j]+=a[m-i-1]; REP(i,0,1<<(m-j-1)){ ll cur=0,fin=0; REP(k,0,m-j){ cur=a[k]; while (i&(1<<k)) cur+=a[++k]; fin^=cur; } lb[j].push_back(fin); // printf("%d %d %lld\n",j,i,fin); } if (j==m) lb[j].push_back(0); sort(lb[j].begin(),lb[j].end()); } /// // ENDL; ll ans=0; FOR(L,0,m) REP(R,0,n-m){ ll sum=lsum[L]+rsum[R]; int m1=lb[L].size(); REP(i,0,m1){ int len=1; while (i<m1-1&&lb[L][i+1]==lb[L][i]) i++,len++; ll tar=sum^lb[L][i]; // cout<<L<<" "<<lb[L][i]<<" "<<tar<<'\n'; ans+=1LL*(upper_bound(rb[R].begin(),rb[R].end(),tar)-lower_bound(rb[R].begin(),rb[R].end(),tar))*len; } } return ans; } int main(){ prepare(); cout<<solve(); }