#include <bits/stdc++.h> using namespace std; #define rep(i, a, b) for(int i = (a); i < int(b); ++i) #define rrep(i, a, b) for(int i = (a) - 1; i >= int(b); --i) #define trav(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it) #define all(v) (v).begin(), (v).end() typedef double fl; typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<pii> vpi; int A[40]; ll cum[40]; map<ll, ll> M[2][20]; void rec(int ind, ll x){ ++M[0][ind][x]; rep(i,ind+1, 19){ rec(i, x^(cum[i]-cum[ind])); } } int main(){ int N; scanf("%d", &N); cum[0]=0; rep(i,0,N){ scanf("%d", A+i); cum[i+1]=cum[i]+A[i]; } rec(0, 0); rep(i,0,20) swap(M[0][i], M[1][i]); reverse(A, A+N); rep(i,0,N){ cum[i+1]=cum[i]+A[i]; } rec(0, 0); ll ans=0; int L=N/2; rep(i,0,L+1) rep(j,0,N-L+1){ if(i < L && j == N-L) continue; if(i == L && j < N-L) continue; ll s=cum[N-j]-cum[i]; for(auto it=M[0][i].begin(); it != M[0][i].end(); ++it){ ll add = it->second*M[1][j][it->first^s]; if(add){ ans += add; } } } printf("%lld\n", ans); }