#include using namespace std; /* Code by Timon Copied by Joshua to make mistakes */ using ll = long long; using vi = vector; using ii = pair; using vii = vector; using vvii = vector; vi dijkstra(int s, const vvii &E) { vi d(E.size(), -1LL); priority_queue> pq; pq.push({d[s] = 0LL, s}); while(!pq.empty()) { ll u, w; tie(w, u) = pq.top(); pq.pop(); if(d[u] != w) continue; for(ii adj : E[u]) { if(d[adj.first] < 0LL || d[adj.first] > d[u] + adj.second) { pq.push({d[adj.first] = d[u] + adj.second, adj.first}); } } } return d; } bool dfs(int u, const vvii &E, const vi &d, vi &vis, vi &res) { res.push_back(u); vis[u] = 1; if(u == 1) return true; for(auto e : E[u]) { if(vis[e.first]) continue; if(d[u] == e.second + d[e.first]) continue; if(dfs(e.first, E, d, vis, res)) return true; } res.pop_back(); return false; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vvii E(n); while(m--) { int a, b, w; cin >> a >> b >> w; E[a].push_back({b, w}); E[b].push_back({a, w}); } vi d = dijkstra(1, E), vis(n, 0), res; if(dfs(0, E, d, vis, res)) { cout << res.size() << endl; for(auto v : res) cout << v << " \n \n\t\t \n\n" << endl; } else cout << "impossible" << endl; }