/* Man Mohan Mishra aka m17 IIIT - Allahabad */ #include <cstdio> #include <cmath> #include <cstring> #include <climits> #include <cstdlib> #include <cctype> #include <iostream> #include <algorithm> #include <utility> #include <string> #include <vector> #include <map> #include <list> #include <stack> #include <queue> #include <set> #include <iterator> #define MOD 1000000007 #define INF 1000000000000000000 #define PI acos(-1) using namespace std; long long GCD (long long a,long long b) { if (b == 0) return a; return(a % b == 0 ? b : GCD(b,a % b)); } long long POW (long long base,long long exp) { long long val; val = 1; while (exp > 0) { if (exp % 2 == 1) { val = (val * base) % MOD; } base = (base * base) % MOD; exp = exp / 2; } return val; } int a[40]; map < int,map < int,int > > mp1,mp2; map < int,map < int,int > > :: iterator it1,it2; map <int,int> temp,v1,v2; map <int,int> :: iterator it; int main() { int n,i,j,x,y,val,cur,sum; long long ans; scanf("%d",&n); for (i = 0; i < n; i++) { scanf("%d",&a[i]); } x = n / 2; y = n - n / 2; for (i = 0; i < (1 << (x - 1)); i++) { val = 0; cur = a[0]; for (j = 0; j < x - 1; j++) { if ((i >> j) & 1) { cur = cur + a[j + 1]; } else { val = val ^ cur; cur = a[j + 1]; } } if (mp1.count(cur) == 0) { mp1[cur] = temp; } if (mp1[cur].count(val) == 0) { mp1[cur][val] = 1; } else { mp1[cur][val] += 1; } val = val ^ cur; if (v1.count(val) == 0) { v1[val] = 1; } else { v1[val] += 1; } } for (i = 0; i < (1 << (y - 1)); i++) { val = 0; cur = a[n - 1]; for (j = 0; j < y - 1; j++) { if ((i >> j) & 1) { cur = cur + a[n - j - 2]; } else { val = val ^ cur; cur = a[n - j - 2]; } } if (mp2.count(cur) == 0) { mp2[cur] = temp; } if (mp2[cur].count(val) == 0) { mp2[cur][val] = 1; } else { mp2[cur][val] += 1; } val = val ^ cur; if (v2.count(val) == 0) { v2[val] = 1; } else { v2[val] += 1; } } ans = 0; for (it1 = mp1.begin(); it1 != mp1.end(); ++it1) { for (it2 = mp2.begin(); it2 != mp2.end(); ++it2) { sum = it1 -> first + it2 -> first; for (it = it1 -> second.begin(); it != it1 -> second.end(); ++it) { val = sum ^ it -> first; if (it2 -> second.count(val) != 0) { ans = ans + it -> second * 1LL * it2 -> second[val]; } } } } for (it = v1.begin(); it != v1.end(); ++it) { if (v2.count(it -> first) != 0) { ans = ans + it -> second * 1LL * v2[it -> first]; } } printf("%lld\n",ans); return 0; }