#include<bits/stdc++.h>
#define maxn 20
using namespace std;
int dp[maxn][maxn],a[maxn][maxn];
int ans=-1,n;
int min(int x,int y)
{
if(x==-1) return y;
if(y==-1) return x;
return x<y?x:y;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
memset(dp,-1,sizeof(dp));
for(int i=0;i<n;i++)
dp[1<<i][i]=0;
for(int i=0;i<1<<n;i++)
{
for(int j=0;j<n;j++)
{
if(dp[i][j]!=-1)
{
for(int k=0;k<n;k++)
{
if(!i&1<<k)
{
dp[i|1<<k][j]=min(dp[i|1<<k][j],dp[i][j]+a[j][k]);
if(i==1<<n-1) ans=min(ans,dp[i|1<<k][j]);
}
}
}
}
}
if(ans!=-1)
cout<<ans<<endl;
return 0;
}