#include <cstdio> #include <cstdlib> #include <algorithm> #include <queue> #include <cmath> #include <iostream> #include <set> #include <fstream> #include <string> #include <vector> #include <unordered_map> using namespace std; #define FOR(i,s,e) for (int i=(s); i<(e); i++) #define FOE(i,s,e) for (int i=(s); i<=(e); i++) #define FOD(i,s,e) for (int i=(s); i>=(e); i--) #define LL long long #define eps 1e-9 #define pi acos(-1.0) #define fail {printf("Impossible\n"); return 0;} LL max(LL a,LL b){if (a>b){return a;} else {return b;}} LL min(LL a,LL b){if (a<b){return a;} else {return b;}} int n; LL a[40]; LL s[40]; unordered_map<LL, int> pre[20], suf[50]; void gen(int id, LL sum, LL xx){ if (id >= n / 2) return; sum += a[id]; if (pre[id].count(sum ^ xx) == 0) pre[id].insert({sum ^ xx, 1}); else pre[id][sum^xx]++; gen(id + 1, sum, xx); gen(id + 1, 0, sum ^ xx); } void gen2(int id, LL sum, LL xx){ if (id <= n / 2) return; sum += a[id]; if (suf[id].count(sum ^ xx) == 0) suf[id].insert({sum ^ xx, 1}); else suf[id][sum^xx]++; gen2(id - 1, sum, xx); gen2(id - 1, 0, sum ^ xx); } LL cnt = 0; int main(){ // freopen("out.txt", "r", stdin); scanf("%d", &n); FOE(i, 1, n) scanf("%lld", &a[i]); s[0] = 0; FOE(i, 1, n) s[i] = s[i - 1] + a[i]; gen(1, 0, 0); gen2(n, 0, 0); FOE(i, 1, n / 2) FOE(j, n / 2, n){ LL su = s[j] - s[i - 1]; if (i != 1) for (unordered_map<LL, int>::iterator it = pre[i - 1].begin(); it != pre[i - 1].end(); ++it){ LL sy = it->first; sy ^= su; if (j != n) { unordered_map<LL, int>::iterator it2 = suf[j + 1].find(sy); if (it2 != suf[j + 1].end()){ cnt += (LL)it2->second * (LL)(it->second); } } else if (sy == 0) cnt += it->second; } else { if (j != n){ unordered_map<LL, int>::iterator it2 = suf[j + 1].find(su); if (it2 != suf[j + 1].end()){ cnt += (LL)it2->second ; }} else if (su == 0) cnt++; } } cout<<cnt<<endl; return 0; }