#include <iostream> #include <vector> #include <map> using namespace std; typedef long long ll; vector< map <ll, ll> > ways(40); int N; vector<ll> A; void build(ll hash, int curr, int last, int name) { if (curr == last) { ways[name][hash]++; return; } // try taking this number as-is ll newHash = hash ^ A[curr]; build(newHash, curr+1, last, name); // now try doing a sum if (curr < last - 1) { A[curr+1] += A[curr]; build(hash, curr+1, last, name); A[curr+1] -= A[curr]; } } int main(){ cin >> N; A = vector<ll>(N,0); for (int i = 0; i < N; i++) cin >> A[i]; for (int i = 0; i <= N/2; i++) build(0,0,i,i); for (int i = N/2 + 1; i <= N; i++) build(0,i,N,i); ll total = 0; for (int leftIndex = 0; leftIndex <= N/2; leftIndex++) for (int rightIndex = N/2 + 1; rightIndex <= N; rightIndex++) { ll sum = 0; for (int i = leftIndex; i < rightIndex; i++) sum += A[i]; for (auto X : ways[leftIndex]) { ll hash = X.first; ll res = X.second; hash ^= sum; res *= ways[rightIndex][hash]; total += res; } } cout << total << endl; return 0; }