#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <queue>
#include <stack>
#include <vector>
#include <iomanip>
using namespace std;
int next[105][105];
int n ;
int g[105][105];
void init()
{
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
if(i==j)
g[i][j]=g[j][i]=0;
else
g[i][j]=g[j][i]=1e9;
}
}
}
void printpath()
{
int st=1,ed=n;
while(st!=ed)
{
cout<<st<<" ";
st=next[st][ed];
}
printf("%d",ed);
}
void floyd()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
next[i][j]=j;
}
}
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(g[i][j]>g[i][k]+g[k][j])
{
g[i][j]=g[i][k]+g[k][j];
next[i][j]=next[i][k];
}
}
}
}cout<<"minlong=";
printf("%d\n",g[1][n]);
printpath();
}
int main( )
{
cin>>n; // init();
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
cin>>g[i][j];
if(g[i][j]==0)
{
g[i][j]=99999;
}
}
floyd();
return 0;
}