#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; }