#include #include #include using namespace atcoder; using mint = modint; using namespace std; #define rep(i,n) for (int i = 0; i < (n); ++i) #define Inf 1000000001 int main(){ int N,M,S,G; cin>>N>>M>>S>>G; vector a(M),b(M),c(M); vector> E(N); rep(i,M){ cin>>a[i]>>b[i]>>c[i]; E[a[i]].push_back(i); E[b[i]].push_back(i); } vector t = {}; vector>> dis(N,make_pair(Inf,t)); priority_queue>,int>,vector>,int>>,greater>,int>>> Q; t.push_back(G); dis[G] = make_pair(0,t); Q.emplace(make_pair(0,t), G); while(Q.size()>0){ auto p = Q.top().first; int u = Q.top().second; Q.pop(); if(dis[u]!=p)continue; rep(i,E[u].size()){ int v = u ^ a[E[u][i]] ^ b[E[u][i]]; auto pp = p; pp.second.insert(pp.second.begin(),v); pp.first += c[E[u][i]]; if(dis[v]>pp){ dis[v] = pp; Q.emplace(pp,v); } } } auto ans = dis[S].second; rep(i,ans.size()){ if(i!=0)cout<<' '; cout<