RT
#include<bits/stdc++.h>
using namespace std;
long long n,m,u,v,w,head[100005],vis[100005],cnt,pre[100005],ans[100005];
struct node{
long long w,u,v;
}edge[200005];
queue<int> q;
long long dis[100005];
void add(int u,int v,int w){
edge[++cnt].v=v;
edge[cnt].w=w;
edge[cnt].u=head[u];
head[u]=cnt;
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
for(int i=1;i<=n;i++)dis[i]=1e15;
q.push(1);
dis[1]=0;
while(!q.empty()){
int x=q.front();
q.pop();
for(int i=head[x];i;i=edge[i].u){
int y=edge[i].v;
if(dis[y]>dis[x]+edge[i].w){
dis[y]=dis[x]+edge[i].w;
if(!vis[y])q.push(y),vis[y]=1;
pre[y]=x;
}
}
}
if(dis[n]==1e15){
cout<<"-1";
return 0;
}
int tot=0;
while(n!=1){
ans[++tot]=n;
n=pre[n];
}
ans[++tot]=1;
for(int i=tot;i>=1;i--)cout<<ans[i]<<" ";
}