#include <cstdio>
#include <map>

using namespace std;

int a[50];

int main(){
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d", &a[i]);
	}
	if(n<=20){
		int cnt=0;
		for(int i=0;i<(1<<(n-1));i++){
			i|=(1<<n);
			int xored=0;
			int prev=-1;
			int sum=0;
			for(int j=0;j<=n;j++){
				sum+=a[j];
				if(i&(1<<j)){
					xored^=sum;
					sum=0;
					prev=j;
				}
			}
			if(xored==0){cnt++;}
			
			i&=~(1<<n);
		}
		printf("%d\n",cnt);
	}
	else{
#define HALF 18
		long long cnt=0;
		for(int x=HALF;x<n;x++){
			// The first division at/after 18th is at xth
			map<int,int> l,r; // sets containing left and right xor possibilities counts.

			for(int i=0;i<(1<<(HALF));i++){
				int xored=0;
				int sum=0;
				int prev=-1;
				int last1=-1;
				for(int j=0;j<HALF;j++){
					if(i&(1<<j)){
						last1=j;
					}
				}
				for(int j=0;j<=last1;j++){
					sum+=a[j];
					if(i&(1<<j)){
						xored^=sum;
						sum=0;
						prev=j;
					}
				}
				for(int j=last1+1;j<=x;j++){
					sum+=a[j];
				}
				l[xored^sum]++;
			}

			if(x!=n-1){
				for(int i=0;i<(1<<(n-x-2));i++){
					int xored=0;
					int sum=0;
					int prev=-1;
					i|=1<<(n-x-2);
					for(int j=0;j<=(n-x-2);j++){
						sum+=a[x+j+1];
						if(i&(1<<j)){
							xored^=sum;
							sum=0;
							prev=j;
						}
					}
					i&=~(1<<(n-x-2));
					r[xored]++;
				}
			}
			else{
				r[0]++;
			}

			for(map<int,int>::iterator it=l.begin();it!=l.end();it++){
				cnt+=(long long)(it->second)*r[it->first];
			}

		}
		printf("%lld\n",cnt);
	}
}