#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;
}