N = int(input()) D = [list(map(int, input().split())) for _ in range(N)] INF = 1 << 60 dp = [[INF] * (1 << N) for _ in range(N)] dp[0][1] = 0 prev = [[-1] * (1 << N) for _ in range(N)] for i in range(1 << N): for j in range(N): if i >> j & 1 == 0: continue for k in range(N): if i >> k & 1 == 1: continue ni = i | 1 << k if dp[j][i] + D[j][k] < dp[k][ni]: prev[k][ni] = j dp[k][ni] = dp[j][i] + D[j][k] ans = INF for i in range(1, N): path = [] ci = i cb = (1 << N) - 1 res = 0 while ci != 0: res += dp[ci][cb] nb = cb ^ (1 << ci) ci = prev[ci][cb] cb = nb ans = min(ans, res) print(ans)