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: continue for j in range(i+1,N): if S>>j&1 or i == j: continue ret = max(ret,dfs(S | 1 << i | 1 << j) + f[i][j]) dp[S] = ret return ret print(dfs(0))