#include <bits/stdc++.h>

#define clr(x) memset((x), 0, sizeof((x)))
#define all(x) (x).begin(), (x).end()
#define pb push_back
#define mp std::make_pair
#define x first
#define y second

typedef std::pair<int, int> PII;
typedef int64_t ll;
typedef std::pair<ll, ll> PLL;
typedef long double ld;
typedef std::pair<ld, ld> PLD;
typedef std::pair<double, double> PDD;
using namespace std;

int nxt() {
    int a;
    scanf("%d", &a);
    return a;
}

const int N = 36;
int a[N];
unordered_map<int, int> dp1[19];
unordered_map<int, int> dp2[19];
int s1[19];
int s2[19];

int len;

void rec1(int l, int r, int xo = 0) {
    if (l == r) {
        dp1[len][xo]++;
        return;
    }
    int s = 0;
    for (int cnt = 1; l + cnt <= r; ++cnt) {
        s += a[l + cnt - 1];
        rec1(l + cnt, r, xo ^ s);
    }
}

void rec2(int l, int r, int xo = 0) {
    if (l == r) {
        dp2[len][xo]++;
        return;
    }
    int s = 0;
    for (int cnt = 1; l + cnt <= r; ++cnt) {
        s += a[l + cnt - 1];
        rec2(l + cnt, r, xo ^ s);
    }
}

void solve() {
    int n = nxt();
    for (int i = 0; i < n; ++i) {
        a[i] = nxt();
    }
    int nl = n / 2;
    int nr = n - nl;
    for (len = 0; len <= nl; ++len) {
        rec1(0, nl - len);
    }
    for (len = 0; len <= nr; ++len) {
        rec2(nl + len, n);
    }
    s1[0] = 0;
    for (int i = 0; i < nl; ++i) {
        s1[i + 1] = s1[i] + a[nl - 1 - i];
    }
    s2[0] = 0;
    for (int i = 0; i < nr; ++i) {
        s2[i + 1] = s2[i] + a[nl + i];
    }

//    for (int ln = 0; ln <= nl; ++ln) {
//        for (pair<int, int> pa : dp1[ln]) {
//            cout << ln << " " << pa.first << " " << pa.second << " " << s1[ln] << endl;
//        }
//    }
//    cout << endl;
//    for (int ln = 0; ln <= nr; ++ln) {
//        for (pair<int, int> pa : dp2[ln]) {
//            cout << ln << " " << pa.first << " " << pa.second << " " << s2[ln] << endl;
//        }
//    }
//    cout << endl;

    long long ans = 0;
    for (len = 0; len <= nl; ++len) {
        for (pair<int, int> pa : dp1[len]) {
            for (int len2 = 1; len2 <= nr; ++len2) {
                int xo = pa.first ^ (s1[len] + s2[len2]);
                if (dp2[len2].count(xo)) {
                    ans += pa.second * 1ll * dp2[len2][xo];
                }
            }
        }
    }
    cout << ans << "\n";
}

int main() {
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    double cl0 = clock();
#endif

    solve();

#ifdef LOCAL
    cerr << "time: " << (clock() - cl0) / CLOCKS_PER_SEC << endl;
#endif
}