#include <stdio.h>
#include <string.h>
#include <algorithm>
int n, a[22][22];
int dp[22][1<<21];
int O(int u, int m)
{
if (m == ((1 << (n)) - 1)) return a[u][0];
int &d = dp[u][m];
if (d != -1) return d;
d = 1e9;
for (int v = 0; v < n; ++v)
{
if (m & (1 << v)) continue;
if (a[u][v] == 0) continue;
d = std::min(d, O(v, m|(1<<v)) + a[u][v]);
}
return d;
}
int main()
{
memset(dp, -1, sizeof dp);
scanf("%d", &n);
for (int i = 0; i < n; ++i) for (int j = 0; j < n; ++j) scanf("%d", &a[i][j]);
printf("%d", O(0, 1));
return 0;
}