//Mobius_Treap
#include<bits/stdc++.h>

using namespace std;

typedef pair<int,int>   II;
typedef vector< II >      VII;
typedef vector<int>     VI;
typedef vector< VI > 	VVI;
typedef long long int 	LL;

#define PB push_back
#define MP make_pair
#define F first
#define S second
#define SZ(a) (int)(a.size())
#define ALL(a) a.begin(),a.end()
#define SET(a,b) memset(a,b,sizeof(a))

#define si(n) scanf("%d",&n)
#define dout(n) printf("%d\n",n)
#define sll(n) scanf("%lld",&n)
#define lldout(n) printf("%lld\n",n)
#define fast_io ios_base::sync_with_stdio(false);cin.tie(NULL)

#define TRACE

#ifdef TRACE
#define trace(...) __f(#__VA_ARGS__, __VA_ARGS__)
template <typename Arg1>
void __f(const char* name, Arg1&& arg1){
	cerr << name << " : " << arg1 << std::endl;
}
template <typename Arg1, typename... Args>
void __f(const char* names, Arg1&& arg1, Args&&... args){
	const char* comma = strchr(names + 1, ',');cerr.write(names, comma - names) << " : " << arg1<<" | ";__f(comma+1, args...);
}
#else
#define trace(...)
#endif

//FILE *fin = freopen("in","r",stdin);
//FILE *fout = freopen("out","w",stdout);
const int N = 38;
map<int,map<int,int> >Y;
map<int,VI> X;
map<int,int>cnt;
int A[N];
int main()
{
	int n;si(n);
	for(int i=0;i<n;i++)
		si(A[i]);
	int l = n/2;
	int r = n-n/2;
	for(int i=0;i<(1<<l);i++)
	{
		int sum=0;
		int j;
		for(j = l-1;j>=0;j--)
		{
			if((1<<j)&i)
				sum+=A[j];
			else
				break;
		}
		int idx = sum;
		sum=0;
		int add=0;
		for(int k = 0;k<=j;k++)
		{
			if((1<<k)&i)
				sum+=A[k];
			else 
			{
				sum+=A[k];
				add ^= sum;
				sum=0;
			}
		}
		X[idx].PB(add);
	}

	for(int i=0;i<(1<<(r-1));i++)
	{
		int sum=0;
		int j;
		for(j = 0;j<r;j++)
		{
			sum+=A[l+j];
			if((1<<j)&i);
			else	break;
		}
		int idx = sum;
		sum=0;
		int add=0;
		for(int k = j+1;k<r;k++)
		{
			if((1<<k)&i)
				sum+=A[l+k];
			else 
			{
				sum+=A[l+k];
				add^=sum;
				sum=0;
			}
		}
		Y[idx][add]++;
	}
	LL ans=0;
	for(auto it=X.begin();it!=X.end();it++)
	{
		int y = it->F;
		for(auto it2 = it->S.begin();it2!=it->S.end();it2++)
		{
			int x = *it2;
			for(auto it3 = Y.begin();it3!=Y.end();it3++)
			{
				int x1 = it3->F;
				ans += it3->S[x^(y+x1)];
			}
		}
	}
	lldout(ans);
	return 0;
}