#include <bits/stdc++.h> using namespace std; #define int long long int a[40], n; map<int, long long> xorPre[20], xorSuf[20]; #undef int int main() { #define int long long ios_base::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i=0; i<=n; i++) { cin >> a[i]; } xorPre[0][0] = 1; for(int i=0; i<n/2; i++) { long long curXor = a[i]; for(int lp=i; lp>=0; lp--) { for(auto el: xorPre[lp]) { xorPre[i + 1][el.first ^ curXor] += el.second; } if(lp != 0) { curXor += a[lp - 1]; } } } reverse(a, a + n); xorSuf[0][0] = 1; for(int i=0; i<n/2 + (n & 1); i++) { long long curXor = a[i]; for(int lp = i; lp >= 0; --lp) { for(auto el: xorSuf[lp]) { xorSuf[i + 1][el.first ^ curXor] += el.second; } if(lp != 0) { curXor += a[lp - 1]; } } } reverse(a, a+n); long long ans = 0; for(auto el: xorPre[n / 2]) { if(xorSuf[(n + 1) / 2].find(el.first) != xorSuf[(n + 1) / 2].end()) { ans += el.second * xorSuf[(n + 1) / 2][el.first]; } } for(int lp = 0; lp < n/2; lp++) { for(int rp = n/2; rp < n; rp++) { long long curXor = 0; for(int i=lp; i<=rp; i++) { curXor += a[i]; } int rtIdx = n - rp - 1; for(auto el: xorSuf[rtIdx]) { int req = curXor ^ el.first; if(xorPre[lp].find(req) != xorPre[lp].end()) { ans += el.second * xorPre[lp][req]; } } } } cout << ans << "\n"; }