#include<iostream>
#include<string.h>
typedef long long int LL;
const LL INF = 0x3f3f3f3f;
using namespace std;
LL road[100][100];
LL way[100][100];
int n,k;
void floyd()
{
//弗洛伊德核心算法
for(int w=0;w<n;w++)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(road[i][j]>(road[i][w]+road[w][j]))
{
road[i][j]=road[i][w]+road[w][j];
way[i][j]=way[i][w];
}
}
}
}
}
int main()
{
scanf("%d%d",&n,&k);
memset(road,INF,sizeof(road));
int a,b,c;
for(int i=0;i<k;i++)
{
scanf("%d%d%d",&a,&b,&c);
road[a][b]=road[b][a]=c;
}
//for(int i=0;i<n;i++)
//road[i][i]=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
way[i][j]=j;
}
}
floyd();
int z=way[0][3];
printf("0");
while(z!=3)
{
printf("->%d",z);
z=way[z][3];
}
printf("->3\n");
printf("%d",road[0][3]);
return 0;
}