#include<iostream> #include<fstream> #include<algorithm> #include<cstring> #include<vector> #include<string> #include<queue> #include<cstdlib> #include<ctime> #include<map> #define in cin #define out cout using namespace std; typedef long long ll; int N,v[50],V[50],Ans; map<int,int> Mapp; void resu(int st,int dr,int t){ if(st>dr){ if(t!=0){ if(t==-1) Mapp[0]++; else Mapp[t]++; } else{ if(Mapp[0]) Ans+=Mapp[0]; } return; } int n=dr-st+1; int K=1<<(n-1); for(int i=0;i<K;i++){ for(int e=0;e<(n-1);e++) v[e] = ((i&(1<<e)) > 0); int k=V[st],s=0; for(int e=0;e<(n-1);e++){ if(v[e]) k+=V[e+st+1]; else s^=k,k=V[e+st+1]; } s^=k; if(t!=0){ if(t==-1) Mapp[s]++; else Mapp[s^t]++; } else{ if(Mapp[s]) Ans+=Mapp[s]; } } } int main(){ in>>N; for(int i=1;i<=N;i++) in>>V[i]; if(N<=0){ int ans=0; int K=1<<(N-1); for(int i=0;i<K;i++){ for(int e=0;e<(N-1);e++) v[e] = ((i&(1<<e)) > 0); int k=V[1],s=0; for(int e=0;e<(N-1);e++){ if(v[e]) k+=V[e+2]; else s^=k,k=V[e+2]; } s^=k; if(!s) ans++; } } else{ int M=N/2; for(int i=1;i<=M;i++){ for(int j=M+1;j<=N;j++){ int basic=0; for(int k=i;k<=j;k++) basic+=V[k]; resu(1,i-1,basic); resu(j+1,N,0); Mapp.clear(); } } resu(1,M,-1); resu(M+1,N,0); out<<Ans<<'\n'; } return 0; }