#include using namespace std; #define INF 10000010 vector < pair > graph[5*100001]; int m,n,l,x,y; int dis[5*100001]; int dij(vector > * v,int s,int * dis) { priority_queue < pair , vector < pair >,greater < pair > > pq; pq.push(make_pair(0,s)); dis[s] = 0; int u; while(!pq.empty()) { u = (pq.top()).second; pq.pop(); for( vector > :: iterator it = v[u].begin(); it != v[u].end();it++) { if(dis[u] + it->first < dis[it->second]) { dis[it->second] = dis[u] + it->first; pq.push(make_pair(dis[it->second],it->second)); } } } } int main() { cin>>n>>m; for(int i = 0;i < m;i++) { scanf("%d%d%d",&x,&y,&l); graph[x].push_back(make_pair(l,y)); graph[y].push_back(make_pair(l,x)); } scanf("%d",&s); for(int i = 0;i < n;i++) dis[i] = INF; dij(graph,s,dis); for(int i = 0;i < n;i++) if(dis[i] == INF) cout<<"-1 "; else cout<