#include <bits/stdc++.h>
using namespace std;

#define sz(v) int(v.size())
#define MOD 1000000007
#define INF 1e9
#define ulint unsigned long long int
#define lint long long int
#define ll long long
#define mp make_pair
#define mt make_tuple
#define pb push_back
#define st first
#define getH(T) get<0>(T)
#define getD(T) get<1>(T)
#define getC(T) get<2>(T)
#define nd second
#define all(X) (X).begin(),(X).end()
#define pow2(X) ((X)*(X))
const double PI = std::atan(1.0)*4;

map<int, int> PD[40][40];
vector<int> vet(40);
int p1;
    
void func(int p0){
	if(sz(PD[p0][p1]) != 0) return;
	int sum = 0;
	for (int i = p0; i < p1; ++i){
		sum += vet[i];
		func(i+1);
		for (map<int, int>::iterator it = PD[i+1][p1].begin(); it != PD[i+1][p1].end(); ++it){
			PD[p0][p1][(*it).st ^ sum] += (*it).nd;
		}
	}
	sum += vet[p1];
	PD[p0][p1][sum]++;
}

int main(void){
	int N;
	cin >> N;
    p1 = N - 1;
	for (int i = 0; i < N; ++i){
		cin >> vet[i];
	}
	func(0);
	cout << PD[0][N-1][0] << endl;
	return 0;
}