#include<bits/stdc++.h>
using namespace std;
const int N=101;
int n,m,u,v,w,e[N][N],d[N][N],pos[N][N],path[N],cnt,res=0x3f3f3f3f;
void built(int l,int r){
if(!pos[l][r])return ;
built(l,pos[l][r]);
path[++cnt]=pos[l][r];
built(pos[l][r],r);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
memset(e,0x3f,sizeof e);
for(int i=1;i<=n;i++)e[i][i]=0;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
e[u][v]=e[v][u]=min(e[v][u],w);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)d[i][j]=e[i][j];
}
for(int k=1;k<=n;k++){
for(int i=1;i<k;i++){
for(int j=i+1;j<k;j++){
if(res-d[i][j]>e[j][k]+e[k][i]){
res=d[i][j]+d[j][k]+e[k][i];
cnt=0;
path[++cnt]=i;
built(i,j);
path[++cnt]=j;
path[++cnt]=k;
}
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(d[i][j]>d[i][k]+d[k][j]){
d[i][j]=d[i][k]+d[k][j];
pos[i][j]=k;
}
}
}
}
if(res==0x3f3f3f3f)cout<<"No solution.";
else{
for(int i=1;i<=cnt;i++){
if(i!=1)cout<<" ";
cout<<path[i];
}
}
return 0;
}