#include using namespace std ; const long long MaxN = 1e6 + 17; const long long INF = 1e14 + 17; long long n , m ; vector > g[MaxN] ; set > S ; long long s , f ; long long d[MaxN] ; int main () { scanf ("%d%d", &n, &m); s = 1 ; for (int i = 1; i <= m; ++ i) { int x, y, w; scanf ("%d%d%d", &x, &y, &w); g[x].push_back (make_pair (y, w)); g[y].push_back (make_pair (x, w)); } for (int i = 1 ; i <= n ; ++i) d[i] = INF ; d[s] = 0 ; vector p(n+1) ; S.insert (make_pair (0,s)) ; while (!S.empty()) { int v = S.begin() -> second; S.erase (*S.begin()); for (int i = 0 ; i < g[v].size() ; ++ i) { int to = g[v][i].first; int w = g[v][i].second; if (d[v] + w < d[to]) { S.erase(make_pair(d[to] , to)) ; d[to] = d[v] + w ; p[to] = v ; S.insert(make_pair(d[to] , to)) ; } } } if(d[n] == INF) return (cout << -1 , 0) ; vector ans ; for(int v = n ; v != 1 ; v = p[v]) { if(p[v] == 0) return(cout << -1,0) ; ans.push_back(v) ; } ans.push_back(1) ; for(int i = ans.size() - 1 ; i >= 0 ; --i) cout << ans[i] << ' ' ; }