/* Man Mohan Mishra aka m17
   IIIT - Allahabad */
#include <cstdio>
#include <cmath>
#include <cstring>
#include <climits>
#include <cstdlib>
#include <cctype>
#include <iostream>
#include <algorithm>
#include <utility>
#include <string>
#include <vector>
#include <map>
#include <list>
#include <stack>
#include <queue>
#include <set>
#include <iterator>

#define MOD 1000000007
#define INF 1000000000000000000
#define PI acos(-1)

using namespace std;

long long GCD (long long a,long long b) {
	if (b == 0) return a;
	return(a % b == 0 ? b : GCD(b,a % b));
}

long long POW (long long base,long long exp) {
	long long val;
	val = 1;
	while (exp > 0) {
		if (exp % 2 == 1) {
			val = (val * base) % MOD;
		}
		base = (base * base) % MOD;
		exp = exp / 2;
	}
	return val;
}

int a[40];
map < int,map < int,int > > mp1,mp2;
map < int,map < int,int > > :: iterator it1,it2;
map <int,int> temp,v1,v2;
map <int,int> :: iterator it;

int main()
{
	int n,i,j,x,y,val,cur,sum;
	long long ans;
	scanf("%d",&n);
	for (i = 0; i < n; i++) {
		scanf("%d",&a[i]);
	}
	x = n / 2;
	y = n - n / 2;
	for (i = 0; i < (1 << (x - 1)); i++) {
		val = 0;
		cur = a[0];
		for (j = 0; j < x - 1; j++) {
			if ((i >> j) & 1) {
				cur = cur + a[j + 1];
			} else {
				val = val ^ cur;
				cur = a[j + 1];
			}
		}
		if (mp1.count(cur) == 0) {
			mp1[cur] = temp;
		}
		if (mp1[cur].count(val) == 0) {
			mp1[cur][val] = 1;
		} else {
			mp1[cur][val] += 1;
		}
		val = val ^ cur;
		if (v1.count(val) == 0) {
			v1[val] = 1;
		} else {
			v1[val] += 1;
		}
	}
	for (i = 0; i < (1 << (y - 1)); i++) {
		val = 0;
		cur = a[n - 1];
		for (j = 0; j < y - 1; j++) {
			if ((i >> j) & 1) {
				cur = cur + a[n - j - 2];
			} else {
				val = val ^ cur;
				cur = a[n - j - 2];
			}
		}
		if (mp2.count(cur) == 0) {
			mp2[cur] = temp;
		}
		if (mp2[cur].count(val) == 0) {
			mp2[cur][val] = 1;
		} else {
			mp2[cur][val] += 1;
		}
		val = val ^ cur;
		if (v2.count(val) == 0) {
			v2[val] = 1;
		} else {
			v2[val] += 1;
		}
	}
	ans = 0;
	for (it1 = mp1.begin(); it1 != mp1.end(); ++it1) {
		for (it2 = mp2.begin(); it2 != mp2.end(); ++it2) {
			sum = it1 -> first + it2 -> first;
			for (it = it1 -> second.begin(); it != it1 -> second.end(); ++it) {
				val = sum ^ it -> first;
				if (it2 -> second.count(val) != 0) {
					ans = ans + it -> second * 1LL * it2 -> second[val];
				}
			}
		}
	}
	for (it = v1.begin(); it != v1.end(); ++it) {
		if (v2.count(it -> first) != 0) {
			ans = ans + it -> second * 1LL * v2[it -> first];
		}
	}
	printf("%lld\n",ans);
	return 0;
}