#include
#include
#include
using namespace std;
int G[20][20];
int dp[20][1<<20];
int laststate=1<<16;
int n;
void dfs(int now,int dis,int state) //现在在地方,从1到现在位置的距离,状态
{
int i,j;
if(now==n){
if(state==laststate){
dp[now][state]=min(dp[now][state],dis);
return;
}
}
if(dis>=dp[now][state]||dis>=dp[n][laststate]){ //减枝,比目前状态大的或许比最终的大的
return ;
}
dp[now][state]=dis;
for(j=2,i=2;i<=n-1;j=j<<1,i++){
if(state&j){
continue;
}
if(i==now){
continue;
}
dfs(i,dis+G[now][i],state|j);
}
if(state==laststate^1){
dfs(n,dis+G[now][n],state|j);
}
return ;
}
int main()
{
int i,j;
#ifndef ONLINE_JUDGE
freopen ("in.txt", "r", stdin);
#endif // ONLINE_JUDGE
while(scanf("%d",&n)!=EOF){
laststate=(1<