#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; }