#include <bits/stdc++.h>

#define COUNT(v, x) upper_bound(v.begin(), v.end(), x)-lower_bound(v.begin(), v.end(), x)

using namespace std;

int N;
int A[36];
vector<int> B;
vector<int> C[36];
int xor_sum;

void rec(int pos, int lim, int delta)
{
    if(0<=pos-delta && pos-delta<N)
        C[pos-delta].push_back(xor_sum);
    if(pos==lim)
        return;
    if(!B.empty())
    {
        xor_sum^=B.back();
        B.back()+=A[pos];
        xor_sum^=B.back();
        rec(pos+delta, lim, delta);
        xor_sum^=B.back();
        B.back()-=A[pos];
        xor_sum^=B.back();
    }
    B.push_back(A[pos]);
    xor_sum^=B.back();
    rec(pos+delta, lim, delta);
    xor_sum^=B.back();
    B.pop_back();
}

int main()
{
    scanf("%d", &N);
    for(int i=0; i<N; i++)
        scanf("%d", A+i);
    if(N==1)
    {
        if(A[0]==0)
            printf("1\n");
        else
            printf("0\n");
        return 0;
    }
    int M=N/2;
    rec(0, M, 1);
    rec(N-1, M-1, -1);
    for(int i=0; i<N; i++)
        sort(C[i].begin(), C[i].end());
    long long ans=0;
    for(auto& it: C[M-1])
        ans+=COUNT(C[M], it);
    for(int l=M-1; l>=0; l--)
        for(int r=M; r<N; r++)
        {
            int x=0;
            for(int i=l; i<=r; i++)
                x+=A[i];
            vector<int> a, b;
            if(l-1>=0)
                a=C[l-1];
            else
                a.push_back(0);
            if(r+1<N)
                b=C[r+1];
            else
                b.push_back(0);
            for(auto& it: a)
                ans+=COUNT(b, it^x);
        }
    printf("%lld\n", ans);
    return 0;
}