#include <cstdio> #include <map> using namespace std; int n, a[40]; map <int, int> Map; long long ans; void dfs(int k, int l, int x, int y) { if (k == l) { x ^= y; if (!Map.count(x)) Map[x] = 1; else Map[x] += 1; }else { if (k == 1) dfs(k + 1, l, x, a[1]); else { dfs(k + 1, l, x ^ y, a[k]); dfs(k + 1, l, x, y + a[k]); } } } void dfs1(int k, int x, int y) { if (k > n) { ans += Map[x ^ y]; }else { dfs1(k + 1, x ^ y, a[k]); dfs1(k + 1, x, a[k] + y); } } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); } int k = n / 2 + 1; for (int l = k; l; l--) { Map.clear(); dfs(1, l, 0, 0); for (int r = k; r <= n; r++) { int sum = 0; for (int i = l; i <= r; i++) sum += a[i]; if (r == n) ans += Map[sum]; else dfs1(r + 2, sum, a[r + 1]); } } printf("%lld\n", ans); }