#include <bits/stdc++.h> using namespace std; typedef long long LL; typedef pair<int,int> pii; double PI = acos(-1); double EPS = 1e-7; int INF = 1000000000; LL INFLL = 1000000000000000000LL; #define fi first #define se second #define mp make_pair #define pb push_back #define input(in) freopen(in,"r",stdin) #define output(out) freopen(out,"w",stdout) #define MIN(a, b) (a) = min((a), (b)) #define MAX(a, b) (a) = max((a), (b)) #define RESET(a, b) memset(a,b,sizeof(a)) #define ALL(a) (a).begin(), (a).end() #define SIZE(a) (int)a.size() #define SORT(a) sort(ALL(a)) #define UNIQUE(a) (a).erase( unique( ALL(a) ), (a).end() ) #define FOR(a, b, c) for (int (a)=(b); (a)<=(c); (a)++) #define FORD(a, b, c) for (int (a)=(b); (a)>=(c); (a)--) #define FORIT(a, b) for (__typeof((b).begin()) a=(b).begin(); a!=(b).end(); a++) int mx[8] = {-1,1,0,0,-1,-1,1,1}; int my[8] = {0,0,-1,1,-1,1,-1,1}; // ----- // int x[37]; long long pre[37]; long long sum[37]; map<long long, int> cnt1[100]; map<long long, int> cnt2[100]; long long get(int l, int r) { return sum[r]-sum[l-1]; } int main() { int n; scanf("%d",&n); FOR(a,1,n) { scanf("%d", &x[a]); pre[a] = pre[a-1]^x[a]; sum[a] = sum[a-1]+x[a]; } pre[n+1] = pre[n]; sum[n+1] = sum[n]; int i = n/2; int j = n-i; int ans = 0; FOR(mask, 0, (1 << i)-1) { int ls = 0; long long nim = 0; int b = 1; FOR(a, 0, i) { if (mask & (1 << a)) { // cout << "hit " << ls+1 << " " << a+b << " " << get(ls+1, a+b) << endl; nim ^= get(ls+1, a+b); ls = a+b; } } cnt1[ls][nim]++; //cout << "fs " << ls << " " << nim << endl; //if (nim) ans++; } FOR(mask, 0, (1 << j)-1) { int ls = n+1; long long nim = 0; int b = i+1; FORD(a, j, 0) { if (mask & (1 << a)) { // cout << "hit " << a+b << " " << ls << " " << get(a+b, ls-1) << endl; nim ^= get(a+b, ls-1); ls = a+b; } } //cout << "se " << ls << " " << nim << endl; cnt2[ls][nim]++; //if (nim) ans++; } FOR(a,0,i) { FOR(b,i+2, n+1) { long long nim = sum[b-1]-sum[a]; //cout << a << " " << b << " " << nim << endl; FORIT(it, cnt1[a]) { long long lol = nim^((*it).fi); long long ways1 = (*it).se; long long ways2 = cnt2[b][lol]; //if (ways1*ways2 > 0) cout << "aa " << a << " " << b << endl; ans += (ways1*ways2); } } } cout << ans << endl; }