///============================================================================///
///                                                                            ///
///                            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;
}