#include using namespace std; int main() { int N, M, S, G; vector> V[210]; cin >> N >> M >> S >> G; for (int i = 0; i < M; i++) { int a, b, c; cin >> a >> b >> c; V[a].push_back({b, c}); V[b].push_back({a, c}); } priority_queue, vector>, greater>> que; que.push({0, G}); int dist[210] = {}, nxt[210] = {}; fill(dist, dist + N, 1e7); fill(nxt, nxt + N, -1); dist[G] = 0; while (!que.empty()) { auto p = que.top(); que.pop(); int d = p.first, v = p.second; if (dist[v] < d) continue; for (auto& e : V[v]) { int u = e.first, cost = e.second; if (nxt[u] == -1 || dist[u] > d + cost) { dist[u] = d + cost; nxt[u] = v; que.push({dist[u], u}); } else if (dist[u] == d + cost && nxt[u] > v) nxt[u] = v; } } int now = S; while (now != G) { cout << now << " "; now = nxt[now]; } cout << G << endl; }