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