#include<cstdio> #include<iostream> #include<vector> #include<algorithm> #include<string> #include<cstring> using namespace std; typedef long long LL; typedef vector<int> VI; #define REP(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i) #define EACH(i,c) for(__typeof((c).begin()) i=(c).begin(),i##_end=(c).end();i!=i##_end;++i) #define eprintf(s...) fprintf(stderr, s) template<class T> inline void amin(T &a, const T &b) { if (b<a) a=b; } template<class T> inline void amax(T &a, const T &b) { if (a<b) a=b; } int N; int A[40]; void rec(int l, int r, LL x, LL e, vector<LL> &v) { if (l == r) v.push_back(x^e); else { // con rec(l+1, r, x, e+A[l], v); // cut rec(l+1, r, x^e, A[l], v); } } vector<LL> calc(int l, int r) { vector<LL> ret; if (l < r) rec(l+1, r, 0, A[l], ret); else ret.push_back(0); sort(ret.begin(), ret.end()); return ret; } vector<LL> L[30]; int main() { scanf("%d", &N); REP (i, N) scanf("%d", A+i); int m = N/2; for (int i=0; i<=m; i++) L[i] = calc(0, i); LL ans = 0; for (int j=m+1; j<=N; j++) { vector<LL> r = calc(j, N); LL C = 0; for (int k=0; k<j; k++) C += A[k]; for (int i=0; i<=m; i++) { EACH (e, r) { ans += upper_bound(L[i].begin(), L[i].end(), C ^ *e) - lower_bound(L[i].begin(), L[i].end(), C ^ *e); } C -= A[i]; } } printf("%lld\n", ans); return 0; }