//#pragma comment(linker,"/STACK:16777216") /*16Mb*/ //#pragma comment(linker,"/STACK:33554432") /*32Mb*/ #include <iostream> #include <cstdio> //#include <algorithm> #include <vector> #include <queue> #include <string> #include <stack> #include <cmath> #include <list> #include <iomanip> #include <set> #include <map> #include <sstream> #include <string.h> #include<fstream> using namespace std; typedef long long LL; typedef unsigned long long ULL; typedef long double LD; typedef pair<int, int> PII; typedef vector<int> VI; #define FOR(i,a,b) for(LL (i)=(a);i<(b);++(i)) #define RFOR(i,a,b) for(int (i)=(a)-1;(i)>=(b);--(i)) #define For(i,a,b) for(int (i)=(a);i<(b);++(i)) #define FoR(i,a,b) for(int (i)=(a)-1;(i)>=(b);--(i)) #define MP make_pair #define I insert #define mod 1000000007 #define INF 1000000001 #define PB push_back #define x0 sdfhrthrth #define x1 fdhttrlhn #define y0 kihrbdb #define y1 ugvrrtgtrg #define eps 1e-5 #define X first #define Y second int n, ans = 0; map<int, LL> S[40]; int a[40]; int SUM[40][40]; int main() { cin >> n; FOR (i, 0, n) { cin >> a[i]; SUM[i][i] = a[i]; RFOR(j, i, 0) SUM[j][i] = a[j] + SUM[j+1][i]; } S[0][0] = 1; FOR (i, 0, n) { for(map<int, LL>::iterator it = S[i].begin(); it != S[i].end(); it++) { FOR (nxt, i, n) { int NN = it->X^SUM[i][nxt]; if (S[nxt+1].count(NN)) S[nxt+1][NN] += it->Y; else S[nxt+1][NN] = it->Y; } } } if (S[n].count(0)) cout<<S[n][0]; else cout<<0; return 0; }