/*
首先.dp的思路是dp[i][j].表示必到第i场的时候j还留在在场,即第i场比赛的时候j胜了.他的转移条件是i-1场j也胜了,而且i-1场还有另一支队伍k也胜了,且这两支队伍在第i场的时候相遇了,而此时j胜了k.所以.转移的方程可以写成dp[i][j]=dp[i-1][j]*dp[i-1][k]*p[i][k].而如何确定k成了现在的问题.经过计算,从高往低记为1,2,3,....n+1.层.则第三层需要二分一次.求出k,j在第i-1场的范围.如果j>mid,则k在left->mid找.反之,则在另一半的区间找.注意二分精度的控制.最后可将四个概率输出.检验其和是否为1.*/
#include <stdio.h>
#include <cstring>
#define maxn 130
double a[maxn][maxn];
double dp[maxn][maxn];
int main()
{
int n;
while(scanf("%d",&n)==1&&n!=-1)
{
int m=1<<n;
for(int i=1; i<=m; i++)
for(int j=1; j<=m; j++)
scanf("%lf",&a[i][j]);
memset(dp,0,sizeof(dp));
int ca=0;
for(int i=1;i<=m;i++)//初始化时应该根据比赛开始的实际状况
dp[0][i]=1;
while(ca!=n)
{
ca++;
int t=n-ca,j;//第几层需要二分的确定范围的次数
for(int i=1; i<=m; i++)
{
int l=1,r=m;
for(j=1; j<=t; j++)
{
int mid=(l+r)>>1;
if(mid<i) l=mid+1;
else r=mid;//注意二分的控制
}
int mid=(l+r)>>1;
if(i>mid)
{
for(int k=l; k<=mid; k++)
dp[ca][i]+=dp[ca-1][k]*a[i][k];
}
else
for(int k=mid+1; k<=r; k++)
dp[ca][i]+=dp[ca-1][k]*a[i][k];
dp[ca][i]*=dp[ca-1][i];
}
}
double max=0;
int pos=0;
for(int i=1; i<=m; i++)
{
if(dp[n][i]>max)
{
max=dp[n][i];
pos=i;
}
}
printf("%d\n",pos);
}
return 0;
}