#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#define N 17
using namespace std;
int n,m;
int mp[N*2][N*2];
int f[1<<N][N];
int main()
{
scanf("%d",&n);
n++;
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
scanf("%d",&mp[i][j]);
for (int k=1;k<=n;k++)//预处理出两个点之间的距离
for (int i=1;i<=n;i++)
for (int j=1;j<=n;j++)
if (i!=k&&k!=j&&i!=j)
if (mp[i][k]+mp[k][j]<mp[i][j])
mp[i][j]=mp[i][k]+mp[k][j];
memset(f,127/3,sizeof(f));
f[1][0]=0;
for (int k=1;k<=(1<<n)-1;k++)//枚举状态
{
for (int i=0;i<=n-1;i++)//枚举起点
if ((k>>i)&1)
for (int j=0;j<n;j++)//枚举终点
f[k|(1<<j)][j]=min(f[k|(1<<j)][j],f[k][i]+mp[i+1][j+1]);
}
int ans=1e9;
int tot=(1<<n)-1;
for (int i=0;i<n;i++)
ans=min(ans,f[tot][i]+mp[i+1][1]);
printf("%d\n",ans);
}