Code
#include <bits/stdc++.h>
#define ULL unsigned long long
using namespace std;
const int N = 35, M = 1 << 15;
ULL w[N];
ULL f[M], g[M];
int lowbit(int x)
{
return x & -x;
}
int main()
{
int n;
scanf("%d", &n);
for (int i = 0; i < n; i ++ )
cin >> w[i];
for (int i = 1; i < (1 << (n / 2)); i ++ )
{
int t = log2(lowbit(i));
f[i] = f[i - lowbit(i)] ^ w[t];
g[i] = g[i - lowbit(i)] ^ w[t + n / 2];
}
ULL res = 0;
for (ULL i = 1; i < (1 << n); i ++ )
{
ULL Xor = (f[i & ((1 << (n / 2)) - 1)] ^ g[i >> (n / 2)]) * i;
res ^= Xor;
}
cout << res;
return 0;
}