///============================================================================/// /// /// /// IT'S ME /// /// BISHAL GAUTAM /// /// CSE,JAHANGIRNAGAR UNIVERSITY,DHAKA /// /// "Pursue Excellence..Success will chase U" /// /// ID: TC/CF => (BG_PeaceMind.) /// /// /// ///============================================================================/// #include<bits/stdc++.h> #define PI acos(-1.0) #define X first #define Y second #define nl printf("\n") #define SZ(x) (int)(x.size()) #define pb(x) push_back(x) #define pii pair<int,int> #define pll pair<ll,ll> #define pdd pair<double,double> #define mpp make_pair ///==Scanning====/// #define S(a) scanf("%d",&a) #define P(a) printf("%d",a) #define SL(a) scanf("%lld",&a) #define S2(a,b) scanf("%d%d",&a,&b) #define S3(a,b,c) scanf("%d%d%d",&a,&b,&c) #define SL2(a,b) scanf("%lld%lld",&a,&b) #define SL3(a,b,c) scanf("%lld%lld%lld",&a,&b,&c) ///==Arr,Vec Functions==/// #define all(v) v.begin(),v.end() #define CLR(a) memset(a,0,sizeof(a)) #define SET(a) memset(a,-1,sizeof(a)) #define CPY(a,b) memcpy(a,b,sizeof(a)) #define MAX(a) (*max_element(all(a))) #define MIN(a) (*min_element(all(a))) #define fv(i,v) for(int i=0;i<(int)v.size();i++) #define fr(i,a,n) for(int i=a;i<=n;i++) #define rf(i,n,a) for(int i=n;i>=a;i--) ///===Some Useful====/// #define OnBit(a) __builtin_popcountll(a) #define LB(v,k) lower_bound(v.begin(),v.end(),k) #define _cin ios_base::sync_with_stdio(0),cin.tie(0) #define dbg(x) cerr<<__LINE__<< ":: "<<#x<<"= "<<x<<endl #define fi(n) for(__typeof(n.begin()) it=n.begin();it!=n.end();it++) #define IO freopen("A.in","r",stdin),freopen("Out.out","w",stdout) using namespace std; ///===TypeDefs=====/// typedef long long ll; typedef unsigned long long ull; typedef vector<int> vi; typedef vector<vi> vvi; typedef vector<ll> vll; typedef vector<pii> vii; ///===Number Theory===/// //template< class T > inline T SQR(T a) { return a*a; } //template< class T > inline T lcm(T a,T b) {a=abs(a);b=abs(b); return (a/_gcd(a,b))*b;} //template<typename T> T POW(T b,T p) {T r=1; while(p){if(p&1)r=(r*b);b=(b*b);p>>=1;}return r;} //template<typename T> T BigMod(T b,T p,T m) {T r=1; while(p){if(p&1)r=(r*b)%m;b=(b*b)%m;p>>=1;}return r;} //template<typename T> T ModInverse(T n,T m) { return BigMod(n,m-2,m); } // /////==GeoMetry=========/// //double DEG(double x) { return (180.0*x)/(PI);} //double RAD(double x) { return (x*(double)PI)/(180.0);} //template<typename T> double DIS(T a,T b){ return sqrt((double)( SQR(a.X-b.X)+ SQR(a.Y-b.Y))); } //template<typename T> T ANGLE(T a,T b){ return atan( double(a.Y-b.Y) / double(a.X-b.X));} //template<typename T> int isLeft(T a,T b,T c) { return (c.X-a.X)*(b.Y-a.Y)-(b.X-a.X)*(c.Y-a.Y); } // /////===IO-Related===/// //template< class T > void prnt(T v) { fv(i,v) {if(!i)cout<<v[i];else cout<<" "<<v[i];} cout<<endl; } //template< class T > void BIN(T n) { if(!n){nl;return;}BIN(n/2);cout<<(n%2); } //template<typename T> T in(){ char ch; T n = 0; bool ng = false; while (1) { ch = getchar(); if (ch == '-') { ng = true; ch = getchar(); break;} if (ch>='0' && ch<='9') break; } while (1) { n = n*10 + (ch - '0'); ch = getchar(); if (ch<'0' || ch>'9') break; } return (ng?-n:n); } ///====Some-Stuff===/// /// atoi( str.c_str() ); // char string to int /// sprintf(str,"%d",num);// num to char string ///int month[]={-1,31,28,31,30,31,30,31,31,30,31,30,31}; //Not Leap Year ///int dx[]={1,0,-1,0};int dy[]={0,1,0,-1}; //4 Direction ///int dx[]={1,1,0,-1,-1,-1,0,1};int dy[]={0,1,1,1,0,-1,-1,-1};//8 Direction ///int dx[]={2,1,-1,-2,-2,-1,1,2};int dy[]={1,2,2,1,-1,-2,-2,-1};//Knight Direction /************************************************************************************** * ///////////////////////////////////////////////////////////////////////////////////* *************************************************************************************/ ///==========CONSTANTS==============/// /// Digit 0123456789*#@%&^$"- /// #define inf 2000000000 #define MD 1000000007 #define eps 1e-9 #define MX 100012 ///================================/// //int BIT[MX + 5]; //vector<int>G[MX]; //int n, cn, ptr, T[MX], L[MX], SS[MX], SC[MX], Chd[MX], Cid[MX], Cpos[MX], CCpos[MX]; // //void add(int p, int vl) { // for(int i = p; i <= MX; i += (i & -i))BIT[i] += vl; //} // //int read(int p) { // int ret = 0; // for(int i = p; i > 0; i -= (i & -i))ret += BIT[i]; // return ret; //} // //void DFS(int u, int p, int lv) { // T[u] = p; // L[u] = lv; // SS[u] = 1; // SC[u] = -1; ///spcl child // int sz = SZ(G[u]), mx = -1; // for(int i = 0; i < sz; i++) { // int v = G[u][i]; // if(v == p) continue; // DFS(v, u, lv + 1); // SS[u] += SS[v]; // if(SS[v] > mx) { // mx = SS[v]; // SC[u] = v; // } // } //} // //void HLD(int u) { // if( Chd[cn] == -1 ) Chd[cn] = u; // Cid[u] = cn; // Cpos[u] = ++ptr; // CCpos[ptr]=u; // if(SC[u] == -1)return; // HLD(SC[u]); // int sz = SZ(G[u]); // for(int i = 0; i < sz; i++) { // int v = G[u][i]; // if(v == SC[u] || v == T[u])continue; // cn++; // HLD(v); // } //} // //int LCA(int u, int v) { // int uhead, vhead, uchain, vchain; // while(true) { // uchain = Cid[u]; // vchain = Cid[v]; // uhead = Chd[uchain]; // vhead = Chd[vchain]; // if(uchain == vchain)return (L[u] < L[v] ? u : v); // if(L[uhead] < L[vhead]) v = T[vhead]; // else u = T[uhead]; // } //} // //int read2(int x,int y) { // return (read(y)-read(x-1)); //} // //int Climb_Up1(int u, int p) { // int uchain, pchain = Cid[p], ret = 0; // int uhead; // while(true) { // uchain = Cid[u]; // if(uchain == pchain) { // if(Cpos[u] >= Cpos[p]) ret+=read2(Cpos[p],Cpos[u]); // break; // } // uhead = Chd[uchain]; // ret+=read2(Cpos[uhead],Cpos[u]); // u = T[uhead]; // } // return ret; //} // //int BS(int lo,int hi){ // int ret=inf,l=lo; // // cout<<CCpos[lo]<< " *** "<<CCpos[hi]<<endl; // while(lo<=hi){ // int md=(lo+hi)/2; // if( ( read(md)-read(l-1) ) >=1 ){ // hi=md-1; // ret=min(ret,md); // } // else lo=md+1; // } // return CCpos[ ret ]; //} // //int Climb_Up2(int u, int p,int tot) { // int uchain, uhead, pchain = Cid[p], ret = 0; // //dbg(tot); // while(true) { // uchain = Cid[u]; // // cout<<u<< " -- "<<uchain<< " ====== "<<ret<<endl; // if(uchain == pchain) { // // cout<<u<< " -- "<<uchain<< " == === "<<ret<<endl; // if(Cpos[u] >= Cpos[p]) { // //cout<< " ++ "<<Cpos[p]<< " "<<Cpos[u]<<endl; // ret+=read2(Cpos[p],Cpos[u]); // // cout<<ret<< " ??\n"; // if(ret==tot) { // // dbg(" Goto BS baby"); // return BS(Cpos[p],Cpos[u]); // } // } // break; // } // uhead = Chd[uchain]; // ret+=read2(Cpos[uhead],Cpos[u]); // //cout<<u<< " -- "<<uhead<< " == "<<ret<<endl; // if(ret==tot) return BS(Cpos[uhead],Cpos[u]); // u = T[uhead]; // } // return ret; //} // //void init() { // fr(i, 0, n) { // G[i].clear();/// Graph vector // // C[i].clear();/// cost vector // //idx[i].clear();/// edge id vector // Chd[i] = -1;/// chain's head // Cid[i] = -1;/// chain's id // Cpos[i] = 0; /// position of node in chain // CCpos[i] = 0; /// position of node in chain // SS[i] = 0; ///Subtree size // } // cn = 1; /// chain no // ptr = 0; /// total nos of chains //} vector<int>G[MX+5]; //vector<int>C[MX+5]; //int cnt,n,col[MX+5],par[MX+5],cst[MX+5]; //double ans; // //double go(int x,int p) { // if( x==p ) return 1.0; // return cst[x]*0.01*go( par[x],p ); //} // //void Dfs(int u) { // int sz=SZ( G[u] ); // for(int i=0; i<sz; i++) { // int v=G[u][i]; // if( col[v] == 1 ) { // ///Cycle!!; // //cout<<u<< " :: "<<v<<endl; // ans+= C[u][i]*0.01*go( u,v ); // cnt++; // } else if( col[i]==0 ) { // col[ v ]=1; // par[ v ]=u; // cst[ v ]=C[u][i]; // Dfs(v); // } // } // col[ u ]=2; //} ll ar[MX+5]; map<ll,ll>dp[38]; int n; ll go(ll p,ll xr){ if( p==n) return (xr==0); if( dp[p].find(xr)!=dp[p].end() ) return dp[p][xr]; dp[p][xr]=0LL; ll sm=0LL; for(int i=p;i<n;i++){ sm+=ar[i]; dp[p][xr]+=go(i+1,xr^sm); } return dp[p][xr]; } int main() { int tc, cs = 1, i, j, k, q, u, v, x, y, z; tc=1; while(tc--) { S(n); fr(i,0,n-1) { SL(ar[i]); } ll ans=go(0,0); printf("%lld\n",ans); } return 0; }