#include #include #include #include #include #include using namespace atcoder; using namespace std; using ll = long long; using ull = unsigned long long; template using max_heap = priority_queue; template using min_heap = priority_queue, greater<>>; ll ll_min = numeric_limits::min(); ll ll_max = numeric_limits::max(); ll ALPHABET_N = 26; // using mint = modint998244353; #define rep(i, n) for (ll i = (ll)0; i < (ll)n; i++) #define rep_(i, k, n) for (ll i = (ll)k; i < (ll)n; i++) #define all(a) a.begin(), a.end() int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll n; cin >> n; vector> D(n, vector(n, 0)); rep(i, n) rep(j, n) { cin >> D[i][j]; } vector dp(1LL << n, vector(n, ll_max)); dp[1][0] = 0; rep_(state, 1, 1LL << n) { rep(cur, n) { if (!(state & (1LL << cur))) continue; if (dp[state][cur] == ll_max) continue; ll rest = n - __builtin_popcountll(state); rep(nex, n) { if (state & (1LL << nex)) continue; ll nstate = state | (1LL << nex); ll dist = D[cur][nex]; dp[nstate][nex] = min(dp[nstate][nex], dp[state][cur] + rest * dist); } } } ll ans = ll_max; rep(i, n) { ans = min(ans, dp[(1LL << n) - 1][i]); } cout << ans << endl; return 0; }