#include<stdio.h>
#define max 10000
int arcs[100][100];//metrix
int visited[100];//1 stand for yes ,0 stand for no
int prev[100];//every point on the path
int d[100];//shortest path
int n;//edge
int v1,v2;//begin & end
void Dijkstra()
{
int v,k;
int min;
for(int i=0;i<n;i++)
{
visited[i]=0;
d[i]=arcs[v1][i];
if(d[i]==max)
prev[i]=0;
else
prev[i]=v1;
}
d[v1]=0;
visited[v1]=1;
for(int i=1;i<n;i++)
{
int temp=max;
int u;
for(int j=0;j<n;j++)
{
if((visited[j]==0)&&(d[j]<temp))
{
u=j;
temp=d[j];
}
}
visited[u]=1;
for(int j=0;j<n;j++)
{
if((visited[j]==0)&&(arcs[u][j]<max))
{
if(d[u]+arcs[u][j]<d[j])
{
d[j]=arcs[u][j]+d[u];
prev[j]=u;
}
}
}
}
}
void SearchPath()
{
int i=0;
int path[100];
while(v2!=v1)
{
path[i++]=v2;
v2=prev[v2];
}
path[i]=v2;
while(i!=-1)
printf("%d\n",path[i--]);
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&arcs[i][j]);
scanf("%d%d",&v1,&v2);
Dijkstra();
SearchPath();
return 0;
}