#include using namespace std; int main() { ios::sync_with_stdio(false); cin.tie(0); int n; cin >> n; array,16> T{}; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ cin >> T[i][j]; } } array id; id.fill(1 << 30); vector> dp(1 << (n - 1), id); for(int i = 1; i < n; i++) dp[1 << (i - 1)][(i - 1)] = T[0][i] * (n - 1); n--; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ T[i][j] = T[i + 1][j + 1]; } } for(int S = 1; S < (1 << n); S++){ int r = n - __builtin_popcount(S); int S2 = S; while(S2){ int lg = __lg(S2 & -S2); int T2 = ((1 << n) - 1) ^ S; while(T2){ int lg2 = __lg(T2 & -T2); dp[S | (1 << lg2)][lg2] = min(dp[S | (1 << lg2)][lg2], dp[S][lg] + T[lg][lg2] * r); T2 -= T2 & -T2; } S2 -= S2 & -S2; } } cout << *min_element(dp.back().begin(), dp.back().end()) << '\n'; }