#include<bits/stdc++.h>
using namespace std;
const int N=22,INF=0x7f7f7f7f;
int n,dis[N][N];
int dp[N][1<<N];
bool v[N];
inline int mn(int a,int b){
return (a<b)?a:b;
}
int dfs(int p,int zt,int stp){
if(stp>=n) return dis[p][1];
if(dp[p][zt]) return dp[p][zt];
v[p]=1,dp[p][zt]=INF;
for(int i=1;i<=n;++i){
if(v[i]) continue;
dp[p][zt]=mn(dfs(i,zt+(1<<p),stp+1)+dis[p][i],dp[p][zt]);
}
v[p]=0;
return dp[p][zt];
}
int read();
int main(){
n=read();
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
dis[i][j]=read();
printf("%d\n",dfs(1,0,1));
return 0;
}
int read(){
int rn=0,rf=1; char rc=getchar();
while(rc<'0'||rc>'9') rf=(rc=='-')?-1:1,rc=getchar();
while(rc>='0'&&rc<='9') rn=(rn<<1)+(rn<<3)+(rc^48),rc=getchar();
return rn*rf;
}