//#pragma comment(linker,"/STACK:16777216") /*16Mb*/
//#pragma comment(linker,"/STACK:33554432") /*32Mb*/
#include <iostream>
#include <cstdio>
//#include <algorithm>
#include <vector>
#include <queue>
#include <string>
#include <stack>
#include <cmath>
#include <list>
#include <iomanip>
#include <set>
#include <map>
#include <sstream>
#include <string.h>
#include<fstream>

using namespace std;

typedef long long LL;
typedef unsigned long long ULL;
typedef long double LD;
typedef pair<int, int> PII;
typedef vector<int> VI;

#define FOR(i,a,b) for(LL (i)=(a);i<(b);++(i))
#define RFOR(i,a,b) for(int (i)=(a)-1;(i)>=(b);--(i))
#define For(i,a,b) for(int (i)=(a);i<(b);++(i))
#define FoR(i,a,b) for(int (i)=(a)-1;(i)>=(b);--(i))
#define MP make_pair
#define I insert
#define mod 1000000007
#define INF 1000000001
#define PB push_back
#define x0 sdfhrthrth
#define x1 fdhttrlhn
#define y0 kihrbdb
#define y1 ugvrrtgtrg
#define eps 1e-5
#define X first
#define Y second

int n, ans = 0;
map<int, LL> S[40];
int a[40];
int SUM[40][40];

int main()
{
    cin >> n;
    FOR (i, 0, n)
    {
        cin >> a[i];
        SUM[i][i] = a[i];
        RFOR(j, i, 0) SUM[j][i] = a[j] + SUM[j+1][i];
    }
    S[0][0] = 1;
    FOR (i, 0, n)
    {
        for(map<int, LL>::iterator it = S[i].begin(); it != S[i].end(); it++)
        {
            FOR (nxt, i, n)
            {
                int NN = it->X^SUM[i][nxt];
                if (S[nxt+1].count(NN)) S[nxt+1][NN] += it->Y;
                else S[nxt+1][NN] = it->Y;
            }
        }
    }
    if (S[n].count(0)) cout<<S[n][0];
        else cout<<0;
    return 0;
}