#include<iostream>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int go[39], gop = 1;
vector<int>can1[39];
vector<int>can2[39];
void gen1(vector<int>&a, int n)
{
	int mid = n / 2;
	if (n % 2) mid++;
	for (int i = 0; i < (1 << (mid - 1)); i++)
	{
		int curx = 0, sum = a[1];
		int tmp = i;
		for (int j = 2; j <= mid; j++)
		{
			if (tmp % 2 == 0)
			{
				curx ^= sum;
				sum = a[j];
			}
			else
			{
				sum += a[j];
			}
			tmp /= 2;
		}
		can1[mid].push_back(curx^sum);
		for (int j = mid + 1; j <= n; j++)
		{
			sum += a[j];
			can1[j].push_back(curx^sum);
		}
	}
}
void gen2(vector<int>&a, int n)
{
	int mid = n / 2;
	if (n % 2) mid++;
	for (int len = 1; len <= mid; len++)
	{
		for (int i = 0; i < (1 << (len - 1)); i++)
		{
			int curx = 0, sum = a[0];
			int tmp = i;
			for (int j = 2; j <= len; j++)
			{
				if (tmp % 2 == 0)
				{
					curx ^= sum;
					sum = a[j - 1];
				}
				else
				{
					sum += a[j - 1];
				}
				tmp /= 2;
			}
			can1[len].push_back(curx^sum);
		}
	}
}
int get(int pos, int val)
{
	return upper_bound(can2[pos].begin(), can2[pos].end(), val) - lower_bound(can2[pos].begin(), can2[pos].end(), val);
}
int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	int n;	
	scanf("%d", &n);
	vector<int>a(n + 1);
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &a[i]);
	}
	bool mag = false;
	if (n % 2 == 0)
	{
		mag = true;
		n++;
		a.push_back(0);
	}
	gen1(a, n);
	for (int i = 1; i <= n; i++)
	{
		can2[i] = can1[i];
		sort(can2[i].begin(), can2[i].end());
	}
	reverse(a.begin(), a.end());
	gen2(a, n);
	reverse(can1 + 1, can1 + 1 + n);
	for (int i = 1; i <= n; i++)
	{
		sort(can1[i].begin(), can1[i].end());
	}
	long long ans = get(n, 0);
	for (int i = n; i >= 1;i--)
	{
		for (int j = 0; j < can1[i].size(); j++)
		{
			ans += get(i - 1, can1[i][j]);
		}
	}
	if (mag) ans /= 2;
	printf("%lld\n", ans);
}