#include <cmath> #include <cstdio> #include <vector> #include <iostream> #include <algorithm> #include <map> using namespace std; int N, A[40]; int solve(int i, int j){ int X = 0; for(int k = i; k <= j; k++) X += A[k]; map <int, int> C; for(int s = 0; s < (1 << (max(i - 1, 0))); s++){ int cs = (s << 1) + 1; int Y = 0, sum = 0; for(int k = 0; k < i; k++){ if((cs & (1 << k)) != 0){ Y ^= sum; sum = 0; } sum += A[k]; } Y ^= sum; // cout << Y << endl; C[Y]++; } long long ret = 0; for(int s = 0; s < (1 << max(N - j - 2, 0)); s++){ int cs = (s << 1) + 1; int Y = 0, sum = 0; for(int k = 0; k < (N - j - 1); k++){ if((cs & (1 << k)) != 0){ Y ^= sum; sum = 0; } sum += A[k + j + 1]; } Y ^= sum; // cout << Y << endl; ret += C[Y ^ X]; } return ret; } int main() { /* Enter your code here. Read input from STDIN. Print output to STDOUT */ scanf("%d", &N); for(int i = 0; i < N; i++) scanf("%d", &A[i]); if(N == 1){ printf("0\n"); return 0; } long long res = solve(N / 2, N / 2 - 1); for(int i = 0; i < (N / 2); i++) for(int j = (N / 2); j < N; j++){ if((i == 0) && (j == (N - 1)))continue; res += solve(i, j); } printf("%lld\n", res); return 0; }