#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> P;
const int N=1e5+5;
int n,m;
struct edge{
int v,w;
};
vector<edge> mp[N];
priority_queue<P,vector<P>,greater<P> > q;
int vis[N],pre[N];
long long dis[N];
void init(){
memset(dis,0x3f,sizeof(dis));
memset(pre,-1,sizeof(pre));
dis[1]=0;
pre[1]=0;
return;
}
void dij(){
init();
q.push({0,1});
while(!q.empty()){
P h=q.top();
q.pop();
int u=h.second;
if(vis[u]) continue;
vis[u]=1;
int len=mp[u].size();
for(int j=0;j<len;j++){
int v=mp[u][j].v,w=mp[u][j].w;
if(dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
pre[v]=u;
q.push({dis[v],v});
}
}
}
return;
}
void print(int v){
if(v==-1){
cout<<-1;
return;
}
if(v==0)
return;
print(pre[v]);
cout<<v<<" ";
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,w;
cin>>u>>v>>w;
mp[u].push_back({v,w});
mp[v].push_back({u,w});
}
dij();
print(n);
return 0;
}
求调