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