#include<bits/stdc++.h> using namespace std; #define FOR(i,a,b) for(i=a;i<b;++i) #define FORD(i,a,b) for(i=a;i>=b;--i) #define infi 1000000007 #define pb push_back #define mp make_pair #define ll long long #define MAX 100000000 #define CO 1000 int n; vector<int> vec; int xo; map<int, int> ma; ll ans = 0; int lef[10000500]; int righ[1000500]; int rg; int idx = 1; void fnlef(int id, int st) { if(id == rg) return; if(!st) { if(!ma[xo]) ma[xo] = idx++; lef[ma[xo]]++; } fnlef(id + 1, 1); int tmp = xo; int tmp2 = vec[id + 1]; xo ^= vec[id]; xo ^= vec[id + 1]; xo ^= (vec[id] + vec[id + 1]); vec[id + 1] = vec[id] + vec[id + 1]; fnlef(id + 1, 0); vec[id + 1] = tmp2; xo = tmp; } void fnrigh(int id, int st) { if(id == rg) return; if(!st) { if(!ma[xo]) ma[xo] = idx++; righ[ma[xo]]++; } fnrigh(id + 1, 1); int tmp = xo; int tmp2 = vec[id + 1]; xo ^= vec[id]; xo ^= vec[id + 1]; xo ^= (vec[id] + vec[id + 1]); vec[id + 1] = vec[id] + vec[id + 1]; fnrigh(id + 1, 0); vec[id + 1] = tmp2; xo = tmp; } void f2() { int i, j, k; FOR(i, 1, idx) ans += ((ll)lef[i] * (ll)righ[i]); } int main() { cin >> n; int i, j, k; FOR(i, 0, n) { cin >> j; xo ^= j; vec.pb(j); } int tmp = n; while(tmp != 1) { // cout << " "<<tmp<<endl; //int mid = tmp / 2 - 1; // FOR(i, 0, tmp) // cout <<" "<<vec[i] <<" "; // cout << endl; xo = 0; FOR(i, 0, tmp / 2 ) { xo ^= vec[i]; } rg = tmp / 2 ; fnlef(0, 0); // cout << "check 1"<<endl; rg = tmp; xo = 0; FOR(i, tmp / 2, tmp) { xo ^= vec[i]; } fnrigh(tmp/ 2 , 0); //cout << "check 2 "<< idx << endl; f2(); memset(lef, 0,sizeof(lef)); memset(righ, 0, sizeof(righ)); vec[tmp / 2 - 1] += vec[tmp / 2]; vec.erase(vec.begin() + (tmp / 2)); tmp--; } cout << ans << endl; }