#include <iostream>
#include <climits>
#include <vector>
#include <unordered_map>

using namespace std;

typedef long long int Z;

int A[40];
int B[40];
int S[40];
unordered_map<int, int> X[20];
unordered_map<int, int> Y[20];

void laske(int* P, int n, unordered_map<int, int>* out) {
	S[0] = 0;
	for(int i = 0; i <= n; ++i) {
		S[i + 1] = S[i] + P[i];
	}
	
	out[0][0] = 1;
	for(int i = 1; i <= n; ++i) {
		for(int j = 0; j < i; ++j) {
			for(auto p : out[j]) {
				out[i][p.first ^ (S[i] - S[j])] += p.second;
			}
		}
	}
}

int main() {
	cin.sync_with_stdio(false);
	cin.tie(nullptr);
	
	int N;
	cin >> N;
	
	int M = N / 2;
	for(int i = 0; i < N; ++i) {
		cin >> A[i];
		B[N - 1 - i] = A[i];
	}
	
	laske(A, M, X);
	laske(B, N - M, Y);
	
	S[0] = 0;
	for(int i = 0; i < N; ++i) {
		S[i + 1] = S[i] + A[i];
	}
	
	Z ret = 0;
	for(int i = 0; i <= M; ++i) {
	for(int j = M + 1; j <= N; ++j) {
		int s = S[j] - S[i];
		for(auto p : X[i]) {
			auto it = Y[N - j].find(s ^ p.first);
			if(it != Y[N - j].end()) {
				ret += (Z)p.second * (Z)it->second;
			}
		}
	}
	}
	cout << ret << '\n';
	
	return 0;
}