#include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; typedef unsigned long long ull; typedef pair P; typedef pairpd; typedef pair sP; typedef pair> PP; const ll mod = 1e4; const ll MOD = 1e9 + 7; const ll MOD2 = 998244353; const ll INF = 1 << 30; const ll INF2 = 9e18; const double INF3 = 9e14; const double eps = 1e-10; const double PI = 3.14159265358979323846; const int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 }; const int tx[8] = { -1,0,1,-1,1,-1,0,1 }, ty[8] = { -1,-1,-1,0,0,1,1,1 }; #define ALL(x) (x).begin(),(x).end() #define ALLR(x) (x).rbegin(),(x).rend() #define pb push_back #define eb emplace_back #define fr first #define sc second ll n, d[15], dp[1 << 15]; int main() { cin >> n; for (int i = 0;i < n;i++) { cin >> d[i]; } for (int i = 0;i < (1 << n);i++) {//訪問状況 for (int j = 0;j < n;j++) {//j番目のbitが立っているか for (int k = j + 1;k < n;k++) {//k番目のbitが立っているか if (!(i & 1 << j)) { if (!(i & 1 << k)) { //どちらも立っていなければ、今まで訪問した最大値と現在見ているペアのXORを足したものと比較 dp[i + (1 << j) + (1 << k)] = max(dp[i + (1 << j) + (1 << k)], dp[i] + (d[j] ^ d[k])); } } } } } cout << dp[(1 << n) - 1] << endl;//全てのペアができた時の最大値 return 0; }