#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;
}