#include <iostream>
#define FOR(i,n) for(int i=1;i<=n;i++)
double gr[22][22][22];
int nxt[22][22][22];
int backtrck[22];
int n;
using namespace std;
int path(int step,int i,int j)
{
backtrck[step] = j;
step-=1;
while(step)
{
backtrck[step]=nxt[step][i][j];
step-=1;
j= nxt[step][i][j];
}
backtrck[step]=nxt[step+1][i][j];
return 0;
}
void init()
{
FOR(step,n)
FOR(i,n)
FOR(j,n)
{
nxt[1][i][j]=i;
gr[step][i][j]=0;
}
}
int main()
{
while(cin>>n)
{
init();
FOR(i,n)
{
FOR(j,n)
{
if(i==j)
{
gr[1][i][j]=1;
continue;
}
else
cin>>gr[1][i][j];
}
}
for(int step=2;step<=n;step++)
FOR(k,n)
{
FOR(i,n)
{
FOR(j,n)
{
double tmp = gr[step-1][i][k]*gr[1][k][j];
if(tmp>gr[step][i][j])
{
gr[step][i][j] = tmp;
nxt[step][i][j] = k;
}
}
}
}
int f=0;
int targetNo;
for(int step=2;step<=n;step++)
{
for(int i=1;i<=n;i++)
{
if(gr[step][i][i]>1.01)
{
f=step;
targetNo=i;
break;
}
}
if(f)
break;
}
//cout<<"f = "<<f<<"\n";
if(!f)
{
cout<<"no arbitrage sequence exists\n";
continue;
}
else {
int index=0;
int currentNo = targetNo;
backtrck[index++] = targetNo;
for(int s=f; s>=1; s--) { //path from targetNo to currentNo
currentNo = nxt[s][targetNo][currentNo];
backtrck[index++] = currentNo;
}
for(int i=index-1; i>0; i--)
cout<< backtrck[i]<<" ";
cout<<backtrck[0]<<"\n";
}
//for(int i=0;i<=f;i++)
//cout<<backtrck[i]<<(i!=f?" ":"\n");
}
return 0;
}