#Created on 2015/03/16 ans inf = 10 ** 9 [N,M,S,G] = map(int, input().split()) dist = [[inf] * N for _ in range(N)] edge = [[0] * N for _ in range(N)] for i in range(N) : dist[i][i] = 0 for _ in range(M) : a,b,c = map(int, input().split()) dist[a][b] = dist[b][a] = c edge[a][b] = edge[b][a] = c for k in range(N) : for i in range(N) : for j in range(N) : dist[i][j] = min(dist[i][j], dist[i][k]+dist[k][j]) ans = str(S) while S != G : for i in range(N) : if edge[S][i] + dist[i][G] == dist[S][G] and edge[S][i] : ans += " " + str(i) S = i break print(ans)