n = int(input())
adj = []
for _ in range(n):
adj.append(list(map(int, input().split())))
dp = [[float('inf')] * n for _ in range(1 << n)]
dp[1][0] = 0 # 从0开始
for st in range(1 << n):
for p in range(n):
if st >> p & 1:
pre_st = st - (1 << p)
for mid in range(n):
if pre_st >> mid & 1:
dp[st][p] = min(dp[st][p], dp[pre_st][mid] + adj[mid][p]) # 在st之前,pre_st肯定是已经计算过的
print(dp[(1<<n)-1][n-1])