#include<bits/stdc++.h>
#define pb push_back
#define mp make_pair
using namespace std;
vector<long long> in;
long long fn(long long N){
	long long n=N/2-1,x,ans,out=0,y=0;
	vector<long long> vec[2];
	for(long long j=0;j<2;j++){
		long long bitmask=0;
		if(j==1){
			n = N-N/2-1;
			y = N/2;
		}
		while(bitmask++<(1<<n)){
			ans=0;
			x=in[0+y];
			for(long long i=0;i<n;i++){
				if((1<<i)&bitmask){
					x+=in[i+1+y];
				}
				else{
					ans^=x;
					x=in[i+1+y];
				}
			}
			ans^=x;
			vec[j].pb(ans);
		}
	}
	map<long long,long long> mymap1,mymap2;
	for(long long i=0;i<2;i++){
		for(long long j=0;j<vec[i].size();j++){
			if(i==0)
			mymap1[vec[i][j]]++;
			else
			mymap2[vec[i][j]]++;
		}
	}
	for(map<long long,long long>::iterator e=mymap1.begin();e!=mymap1.end();++e){
		if(mymap2.find(e->first)!=mymap2.end()){
			out+=e->second*mymap2[e->first];
		}
	}
	//cout<<out<<endl;
	return out;
}
int main(){
	long long N;
	cin>>N;
	long long arr[N];
	for(long long i=0;i<N;i++){
		cin>>arr[i];
	}
	long long sm[N+1];
	sm[0]=0;
	for(long long i=1;i<=N;i++){
		sm[i]=arr[i-1]+sm[i-1];
	}
	//cout<<sm[N/2]<<endl;
	for(long long i=0;i<N;i++){
		in.pb(arr[i]);
	}
	long long out1=0;
	out1+=fn(in.size());
	//cout<<out1<<endl;
	while(1){
		N=in.size();
		vector<long long> in2;
		for(long long i=0;i<N/2-1;i++){
			in2.pb(in[i]);
		}
		in2.pb(in[N/2-1]+in[N/2]);
		for(long long i=N/2+1;i<N;i++){
			in2.pb(in[i]);
		}
		in=in2;
		//for(long long i=0;i<in.size();i++){
		//	cout<<in[i]<<" ";
		//}
		//cout<<"\n";
		out1+=fn(in.size());
		if(in.size()==1)
			break;
	}
	

	cout<<out1;
	return 0;
}