#include <bits/stdc++.h> using namespace std; typedef long long ll; #define pii pair<int,int> #define pll pair<ll,ll> #define pdd pair<double,double> #define X first #define Y second #define REP(i,a) for(int i=0;i<a;++i) #define REPP(i,a,b) for(int i=a;i<b;++i) #define FILL(a,x) memset(a,x,sizeof(a)) #define foreach( gg,itit ) for( typeof(gg.begin()) itit=gg.begin();itit!=gg.end();itit++ ) #define mp make_pair #define pb push_back inline int max(int a,int b){return a<b?b:a;} inline int min(int a,int b){return a>b?b:a;} inline ll max(ll a,ll b){return a<b?b:a;} inline ll min(ll a,ll b){return a>b?b:a;} const int mod = 1e9+7; const int N = 1e6+10; const ll INF = 1e18; ll arr[40]; vector<ll> calc(vector<ll> &a){ vector<ll> b; if(a.size()==0) {b.pb(0);return b;} if(a.size()==1) return a; int n=(int)a.size()-1; REP(i,1<<n){ ll x=0,y=a[0]; REP(j,n) if((i>>j)&1){ x=x^y; y=a[j+1]; }else{ y+=a[j+1]; } x^=y; b.pb(x); } return b; } int main(){ int n; scanf("%d",&n); REP(i,n) scanf("%lld",&arr[i]); ll ans=0; vector<ll>a ,c,d; vector<ll>b ; REP(i,n/2+1) REPP(j,n/2,n){ a.clear();b.clear(); // printf("%d %d\n",i,j); REP(k,i) a.pb(arr[k]); REPP(k,j+1,n) b.pb(arr[k]); a=calc(a),b=calc(b); ll x=0; REPP(k,i,j+1) x+=arr[k]; sort(a.begin(),a.end()); sort(b.begin(),b.end()); // REP(k,(int)b.size()) printf("%lld\n",b[k]); REP(k,(int)a.size()){ ans+=upper_bound(b.begin(),b.end(),a[k]^x)-lower_bound(b.begin(),b.end(),a[k]^x); /// printf("gg%d %d %lld %lld %lld\n",i,j,x,a[k],ans); } } printf("%lld\n",ans); return 0; }