#include <bits/stdc++.h>
using namespace std;
#define int long long
int a[40], n;
map<int, long long> xorPre[20], xorSuf[20];

#undef int
int main()	{
	#define int long long
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n;
	for(int i=0; i<=n; i++)	{
		cin >> a[i];
	}
	xorPre[0][0] = 1;
	for(int i=0; i<n/2; i++)	{
		long long curXor = a[i];
		for(int lp=i; lp>=0; lp--)	{
			for(auto el: xorPre[lp])	{
				xorPre[i + 1][el.first ^ curXor] += el.second;
			}
			if(lp != 0)	{
				curXor += a[lp - 1];
			}
		}
	}
	reverse(a, a + n);
	xorSuf[0][0] = 1;
	for(int i=0; i<n/2 + (n & 1); i++)	{
		long long curXor = a[i];
		for(int lp = i; lp >= 0; --lp)	{
			for(auto el: xorSuf[lp])	{
				xorSuf[i + 1][el.first ^ curXor] += el.second;
			}
			if(lp != 0)	{
				curXor += a[lp - 1];
			}
		}
	}
	reverse(a, a+n);
	long long ans = 0;
	for(auto el: xorPre[n / 2])	{
		if(xorSuf[(n + 1) / 2].find(el.first) != xorSuf[(n + 1) / 2].end())	{
			ans += el.second * xorSuf[(n + 1) / 2][el.first];
		}
	}
	for(int lp = 0; lp < n/2; lp++)	{
		for(int rp = n/2; rp < n; rp++)	{
			long long curXor = 0;
			for(int i=lp; i<=rp; i++)	{
				curXor += a[i];
			}
			int rtIdx = n - rp - 1;
			for(auto el: xorSuf[rtIdx])	{
				int req = curXor ^ el.first;
				if(xorPre[lp].find(req) != xorPre[lp].end())	{
					ans += el.second * xorPre[lp][req];
				}
			}	
		}
	}
	cout << ans << "\n";
}