#include using namespace std; #define rep(i, n) for(int i = 0; i < (int)n; ++i) #define FOR(i, a, b) for(int i = a; i < (int)b; ++i) #define rrep(i, n) for(int i = ((int)n - 1); i >= 0; --i) typedef long long ll; typedef long double ld; const int Inf = 1e9; const double EPS = 1e-9; const int MOD = 1e9 + 7; int main() { cin.tie(nullptr); ios::sync_with_stdio(0); int n, m, s, g; cin >> n >> m >> s >> g; vector > d(n, vector(n, Inf)); vector > next(n, vector(n)); rep (i, n) { rep (j, n) next[i][j] = j; d[i][i] = 0; } rep (i, m) { int a, b, c; cin >> a >> b >> c; d[a][b] = d[b][a] = c; } rep (k, n) { rep (i, n) { rep (j, n) { if (d[i][j] > d[i][k] + d[k][j]) { d[i][j] = d[i][k] + d[k][j]; next[i][j] = next[i][k]; } else if (k != i && d[i][k] + d[k][j] == d[i][j]) { next[i][j] = min(next[i][j], next[i][k]); } } } } for (int x = s; x != g; x = next[x][g]) { cout << x << " "; } cout << g << endl; return 0; }