int N, A[19]; int dfs(bitset<24>& flg, int val = 0){ int i = 0; while (i < N && flg[i]) ++i; if (i == N) return val; flg.set(i); int best = 0; REP(j,i+1,N){ if (flg[j]) continue; flg.set(j); best = max(best, dfs(flg, val^(A[i]+A[j]))); flg.reset(j); } flg.reset(i); return best; } { rd(N,A(N)); bitset<24> flg;flg.reset(); cout << dfs(flg) << endl; }