#include <bits/stdc++.h>

using namespace std;

#define rep(i, a, b) for(int i = (a); i < int(b); ++i)
#define rrep(i, a, b) for(int i = (a) - 1; i >= int(b); --i)
#define trav(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)
#define all(v) (v).begin(), (v).end()

typedef double fl;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
typedef vector<pii> vpi;

int A[40];
ll cum[40];
map<ll, ll> M[2][20];

void rec(int ind, ll x){
	++M[0][ind][x];
	rep(i,ind+1, 19){
		rec(i, x^(cum[i]-cum[ind]));
	}
}

int main(){
	int N;
	scanf("%d", &N);
	cum[0]=0;
	rep(i,0,N){
		scanf("%d", A+i);
		cum[i+1]=cum[i]+A[i];
	}
	rec(0, 0);
	rep(i,0,20)
		swap(M[0][i], M[1][i]);
	reverse(A, A+N);
	rep(i,0,N){
		cum[i+1]=cum[i]+A[i];
	}
	rec(0, 0);
	ll ans=0;
	int L=N/2;
	rep(i,0,L+1)
		rep(j,0,N-L+1){
			if(i < L && j == N-L)
				continue;
			if(i == L && j < N-L)
				continue;
			ll s=cum[N-j]-cum[i];
			for(auto it=M[0][i].begin(); it != M[0][i].end(); ++it){
				ll add = it->second*M[1][j][it->first^s];
				if(add){
					ans += add;
				}
			}
		}
	printf("%lld\n", ans);
}