#include <bits/stdc++.h>
using namespace std;

int n;
int m;

long long tab[50];

map <long long,long long> mapa;

long long wyn;

vector <long long> xorp[50];
vector <long long> xors[50];

long long x;

int main()
{
    scanf("%d", &n);
    for (int i=1; i<=n; i++)
    {
        scanf("%lld", &tab[i]);
        tab[i]+=tab[i-1];
    }
    m=n/2;
    xorp[0].push_back(0);
    for (int i=1; i<=m; i++)
    {
        for (int j=0; j<i; j++)
        {
            for (int l=0; l<xorp[j].size(); l++)
            {
                xorp[i].push_back(xorp[j][l]^(tab[i]-tab[j]));
            }
        }
    }
    xors[n+1].push_back(0);
    for (int i=n; i>m; i--)
    {
        for (int j=n+1; j>i; j--)
        {
            for (int l=0; l<xors[j].size(); l++)
            {
                xors[i].push_back(xors[j][l]^(tab[j-1]-tab[i-1]));
            }
        }
    }
    for (int i=1; i<=n; i++)
    {
        sort(xorp[i].begin(), xorp[i].end());
        sort(xors[i].begin(), xors[i].end());
    }
    for (int i=1; i<=m; i++)
    {
        for (int j=m; j<=n; j++)
        {
            x=tab[j]-tab[i-1];
            for (int l=0; l<xorp[i-1].size(); l++)
            {
                wyn+=upper_bound(xors[j+1].begin(), xors[j+1].end(), x^xorp[i-1][l])-lower_bound(xors[j+1].begin(), xors[j+1].end(), x^xorp[i-1][l]);
            }
        }
    }
    printf("%lld", wyn);
    return 0;
}