N = int(input()) f = [[int(j) for j in input().split()] for i in range(N)] dp = [-1 for i in range(1 << N)] def dfs(S): if S == (1<>i&1) == 0: index = i break for i in range(index+1,N): if S>>i&1: continue ret = max(ret,dfs(S | 1 << i | 1 << index) + f[i][index]) dp[S] = ret return ret print(dfs(0))