#include<bits/stdc++.h>
using namespace std;
const int INF=1e9;
int n;
int a[21][21],dp[21][(1<<20)],u,from;
void dg(int need,int now,int num)
{
if(need>0&&num>n)return ;
if(need==0)
{
dp[u][now]=min(dp[u][now],dp[from][now-(1<<(u-1))]+a[from][u]);
return ;
}
from=num;
if(now^(1<<(num-1))==now+(1<<(num-1)))dg(need-1,now+(1<<(num-1)),num+1);
dg(need,now,num+1);
return ;
}
int main(){
freopen("P1171_1.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<(1<<n);j++)
dp[i][j]=INF;
dp[1][1]=0;
for(int i=1;i<n;i++)
for(int j=1;j<=n;j++)
{
u=j;
dg(i,(1<<(j-1)),1);
}
int ans=INF;
for(int i=2;i<=n;i++)ans=min(ans,dp[i][(1<<n)-1]+a[i][1]);
printf("%d",ans);
return 0;
}