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) for mask in range(1, 1 << n): bm = bin(mask)[2:] if bm.count('1') & 1: continue val = 0 pos = [i for i in range(n) if mask & (1 << i)] for i in pos: for j in pos: if j >= i: break pair = (1 << i) + (1 << j) val = max(val, dp[mask ^ pair] + F[i][j]) dp[mask] = val return dp[-1] n, F = read_data() print(solve(n, F))