import itertools input = raw_input range = xrange def read_data(): n = int(input()) F = [list(map(int, input().split())) for _ in range(n)] return n, F def solve(n, F): dp = [0] * (1 << n) mmax = max for mask in range(1, 1 << n): if (bin(mask).count('1') & 1): continue pos = [i for i in range(n) if mask & (1 << i)] # if (len(pos) & 1): continue val = 0 for i, j in itertools.combinations(pos, 2): tmp = dp[mask - (1 << i) - (1 << j)] + F[i][j] if tmp > val: val = tmp dp[mask] = val return dp[-1] n, F = read_data() print(solve(n, F))