#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int v, w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int main() { int N, M, S, G; cin >> N >> M >> S >> G; vector > adj(N, vector(N)), d(N, vector(N, INT_MAX / 2)); for (int i = 0; i < N; i++) d[i][i] = 0; while (M--) { int a, b, c; cin >> a >> b >> c; adj[a][b] = adj[b][a] = c; d[a][b] = d[b][a] = c; } for (int k = 0; k < N; k++) for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) d[i][j] = min(d[i][j], d[i][k] + d[k][j]); int i = S; while (i != G) for (int j = 0; j < N; j++) if (adj[i][j] && adj[i][j] + d[j][G] == d[i][G]) { cout << i << ' '; i = j; break; } cout << G << endl; }