using System; using System.Collections.Generic; using System.Linq; using System.Collections; using System.Linq.Expressions; static class Program { static void Main() { new Magatro().Solve(); } } struct P { public string Name; public int Time; public P(string s, int time) { Name = s; Time = time; } } class Magatro { private int N; private int[][] F; private int[] M = (new int[1 << 24]).Select(i => -1).ToArray(); private void Scan() { N = int.Parse(Console.ReadLine()); F = new int[N][]; for (int i = 0; i < N; i++) { F[i] = Console.ReadLine().Split(' ').Select(int.Parse).ToArray(); } } public int Sol(int use) { if (M[use] != -1) { return M[use]; } int first = -1; for (int i = 0; i < N; i++) { int j = 1 << i; if ((use & j) == 0) { first = i; break; } } if (first == -1) { return 0; } use += 1 << first; int max = -1; for (int second = first + 1; second < N; second++) { int j = 1 << second; if ((use & j) == 0) { use += 1 << second; var i = Sol(use) + F[first][second]; if (max < i) { max = i; } use -= 1 << second; } } use -= 1 << first; M[use] = max; return max; } public void Solve() { Scan(); Console.WriteLine(Sol(0)); } }