#include #define ll long long #define INF 1000000005 #define MOD 1000000007 #define EPS 1e-10 #define rep(i,n) for(int i=0;i<(int)n;++i) #define each(a, b) for(auto (a): (b)) #define all(v) (v).begin(),(v).end() #define fi first #define se second #define pb push_back #define show(x) cout <<#x<<" = "<<(x)<P; const int MAX_N = 24; int dp[1 << MAX_N]; int fav[MAX_N][MAX_N]; int main() { int n; cin >> n; rep(i,n){ rep(j,n){ cin >> fav[i][j]; } } for(int i=0;i<=n-2;i+=2){ vector v(n); fill(v.end() - i, v.end(), true); do { vector emp; int st = 0; rep(i,n) { if (v[i]) { st += (1 << i); }else{ emp.pb(i); } } int mx = 0; int id; rep(j,emp.size()-1){ if(mx < fav[emp[0]][emp[j+1]]){ mx = fav[emp[0]][emp[j+1]]; id = emp[j+1]; } } int next = st + (1 << emp[0]) + (1 << id); dp[next] = max(dp[next],dp[st]+mx); } while (next_permutation(v.begin(), v.end())); } cout << dp[(1 << n) - 1] << endl; return 0; }