for (int i = 0; i < n; ++ i) for (int j = 0; j < n; ++ j) cin >> w[i][j];
memset(f, 0x3f, sizeof f); f[1][0] = 0;
for (int i = 1; i < 1 << n; i += 2) for (int j = 0; j < n; ++ j) if (i >> j & 1) for (int k = 0; k < n; ++ k) if (i ^ (1 << j) >> k & 1) f[i][j] = min(f[i][j], f[i ^ (1 << j)][k] + w[k][j]);
int ans = 0x3f3f3f3f; for (int i = 1; i < n; ++ i) ans = min(ans, f[(1 << n) - 1][i] + w[i][0]);