#define _USE_MATH_DEFINES #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; typedef pair i_c; struct edge { int v, w; }; ll MOD = 1000000007; ll _MOD = 1000000009; double EPS = 1e-10; int INF = INT_MAX / 4; int main() { int N, M, S, G; cin >> N >> M >> S >> G; vector > d(N, vector(N, INF)); for (int i = 0; i < N; i++) d[i][i] = 0; vector > adj(N, vector(N)); while (M--) { int a, b, c; cin >> a >> b >> c; d[a][b] = d[b][a] = c; adj[a][b] = adj[b][a] = true; } 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, mini = d[S][G]; cout << S; while (i != G) { for (int j = 0; j < N; j++) { if (!adj[i][j] || d[i][j] + d[j][G] > mini) continue; cout << ' ' << j; mini -= d[i][j]; i = j; } } cout << endl; }