#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main(){ int N,M,S,G; cin >> N >> M >> S >> G; vector > edge[N]; int dist[N][N]; for( int i = 0 ; i > a >> b >> c; edge[a].push_back(make_pair(b,c)); edge[b].push_back(make_pair(a,c)); dist[a][b]=c; dist[b][a]=c; } for( int i = 0 ; i < N; i++ ){ for( int j = 0 ; j < N ; j++ ){ for( int k = 0 ; k < N ; k++ ){ dist[j][k] = min(dist[j][k],dist[j][i]+dist[i][k]); } } } for( int i = 0 ; i < N ; i++ ){ dist[i][i]=0; sort(edge[i].begin(),edge[i].end()); } int mindist = dist[S][G]; vector ans; ans.push_back(S); int prev = S; int curDist =0; while( prev!= G){ for( int i = 0 ; i < (int) edge[prev].size(); i++ ){ pair dw = edge[prev][i]; //cout << dw.first<<", "<