N = int(input()) C = [] for i in range(N): C.append(list(map(int, input().split()))) inf = 10 ** 18 N2 = 1 << (2 * N) dp = [[inf] * N for i in range(N2)] for i in range(N): dp[1 << i][i] = 0 for s in range(1, N2): for p in range(N): if (s >> p) & 1 == 0: continue for q in range(N): if p == q: continue if (s >> q) & 1 and (s >> (q + N)) & 1: continue # if (s >> (p + N)) & 1: # ns = s ^ (1 << (p + N)) # else: # ns = s ^ (1 << p) if (s >> q) & 1 == 0: ns = s | (1 << q) dp[ns][q] = min(dp[ns][q], dp[s][p] + C[p][q]) else: ns = s | (1 << (q + N)) dp[ns][q] = min(dp[ns][q], dp[s][p] + C[p][q]) ans = min(dp[-1]) for i in range(N): ans = min(ans, dp[(N2 - 1)^(1 << (i + N))][i]) print(ans)