#include <bits/stdc++.h>
#define pii pair<int,int>
usingnamespacestd;//노드 수에 맞게 크기 조정.vector<pii>graph[20001];boolvis[20001];intdist[20001];//v: 노드의 수, k: 시작 정점.voiddijkstra(intv,intk){fill(vis+1,vis+1+v,false);fill(dist+1,dist+1+v,1e9),dist[k]=0;//k->k 제외 거리 무한대.priority_queue<pii,vector<pii>,greater<pii>>pq;pq.push({0,k});while(!pq.empty()){piicur=pq.top();pq.pop();if(vis[cur.second])continue;//처음 node에 도달한 경우가 최소 비용.vis[cur.second]=true,dist[cur.second]=cur.first;for(autogo:graph[cur.second])//갈수있는 모든정점 방문.pq.push({cur.first+go.second,go.first});}//출력.for(inti=1;i<=v;i++)if(dist[i]==1e9)printf("INF\n");elseprintf("%d\n",dist[i]);}intmain(void){intv,e,k;scanf("%d %d %d",&v,&e,&k);while(e--){inta,b,w;scanf("%d %d %d",&a,&b,&w);graph[a].push_back({b,w});//graph[b].push_back({a,w});//방향그래프.}dijkstra(v,k);return0;}