#include<cstdio>
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<cstring>
using namespace std;

typedef long long LL;
typedef vector<int> VI;

#define REP(i,n) for(int i=0, i##_len=(n); i<i##_len; ++i)
#define EACH(i,c) for(__typeof((c).begin()) i=(c).begin(),i##_end=(c).end();i!=i##_end;++i)
#define eprintf(s...) fprintf(stderr, s)

template<class T> inline void amin(T &a, const T &b) { if (b<a) a=b; }
template<class T> inline void amax(T &a, const T &b) { if (a<b) a=b; }

int N;
int A[40];

void rec(int l, int r, LL x, LL e, vector<LL> &v) {
    if (l == r) v.push_back(x^e);
    else {
	// con
	rec(l+1, r, x, e+A[l], v);
	// cut
	rec(l+1, r, x^e, A[l], v);
    }
}
vector<LL> calc(int l, int r) {
    vector<LL> ret;
    if (l < r) rec(l+1, r, 0, A[l], ret);
    else ret.push_back(0);
    sort(ret.begin(), ret.end());
    return ret;
}

vector<LL> L[30];
int main() {
    scanf("%d", &N);
    REP (i, N) scanf("%d", A+i);
    
    int m = N/2;
    for (int i=0; i<=m; i++) L[i] = calc(0, i);

    LL ans = 0;
    for (int j=m+1; j<=N; j++) {
	vector<LL> r = calc(j, N);
	
	LL C = 0;
	for (int k=0; k<j; k++) C += A[k];
	for (int i=0; i<=m; i++) {
	    EACH (e, r) {
	    	ans += upper_bound(L[i].begin(), L[i].end(), C ^ *e)
	    	    - lower_bound(L[i].begin(), L[i].end(), C ^ *e);
	    }
	    
	    C -= A[i];
	}
    }

    printf("%lld\n", ans);
    return 0;
}