#include <cstdio>
#include <vector>
#include <algorithm>
#include <vector>
#include <unordered_map>

using namespace std;

vector<vector<int> > gen(vector<int> A) {
    vector<vector<int> > gener;
    gener.push_back(vector<int>(1,0));
    for (int i=0;i<A.size();i++) {
        gener.push_back(vector<int>());
        int cur = A[i];
        for (int j=i;j>=0;j--) {
            for (int k: gener[j]) gener.back().push_back(cur^k);
            if (j) cur+=A[j-1];
        }
    }
    return gener;
}

int N;
int A[50];
int xo[50];

int main() {
    scanf("%d",&N);
    for (int i=1;i<=N;i++) scanf("%d",&A[i]);
    for (int i=1;i<=N;i++) xo[i] = xo[i-1]+A[i];
    if (N<=20) {
        vector<int> has;
        for (int i=1;i<=N;i++) has.push_back(A[i]);
        auto num = gen(has);
        long long ans = 0;
        for (int i: num[N]) if (i==0) ans+=1;
        printf("%lld\n",ans);
    } else {
        vector<int> has;
        for (int i=1;i<=18;i++) has.push_back(A[i]);
        auto one = gen(has);
        has.clear();
        for (int i=N;i>=19;i--) has.push_back(A[i]);
        auto twoV = gen(has);
        vector<unordered_map<int,int> > two;
        for (auto v: twoV) {
            two.push_back(unordered_map<int,int>());
            for (int x: v) two.back()[x]+=1;
        }
        long long ans = 0;
        for (int i: one.back()) ans+=two.back()[i];
        for (int i=18;i>0;i--) for (int j=19;j<=N;j++) for (int k: one[i-1]) ans+=two[N-j][k^(xo[j]-xo[i-1])];
        printf("%lld\n",ans);
    }
    
    return 0;
}