#include<cstdio> #include<cstring> #include<cmath> #include<cstdlib> #include<iostream> #include<algorithm> #include<string> #include<vector> #include<set> #include<queue> #include<map> #include<bitset> #include <unordered_map> using namespace std; #define PII pair<int,int> #define X first #define Y second #define PB push_back #define CLR(a) memset(a, 0, sizeof(a)) #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define FOE(i,a,b) for (int i=(a);i<=(b);i++) #define FIT(i,a) for (__typeof__((a).begin()) i = (a).begin(); i != (a).end(); i++) #define TRA(i,a,b) for (int i = (a); i != -1; i = (b)[i]) #define INF (1 << 30) #define EPS (1e-9) #define REP(i,n) FOR(i,0,n) #define LL long long #define MOD 1000000007 #define N 100 unordered_map<LL, LL> mp[N]; LL ans; LL a[N]; int n, m; void f(int l, int x, LL Xor){ if (l == -1){ if (x > m) return; int len = m - x; // printf("|||%d %d\n", len, Xor); ans += mp[len][Xor]; LL sum = 0; for (int i = x; i < n; i++){ sum += a[i]; f(l, i + 1, Xor ^ sum); } } else{ if (x == n){ mp[l][Xor]++; // printf("%d %d\n", l, Xor); return; } LL sum = 0; for (int i = x; i < n; i++){ sum += a[i]; f(l, i + 1, Xor ^ sum); } return; } } int main(){ scanf("%d", &n); FOR(i,0,n) scanf("%lld", a + i); m = n / 2; FOE(l,0,m){ LL sum = 0; for (int i = 0; i < l; i++) sum += a[m - 1 - i]; for (int i = m; i < n; i++){ sum += a[i]; f(l, i + 1, sum); } } LL sum = 0; for (int i = 0; i < m; i++){ sum += a[i]; f(-1, i + 1, sum); } printf("%lld\n", ans + mp[m][0]); return 0; }