#include<stdio.h>
#include<limits.h>
struct Edge{
    int u,v,w;
};
int main(){
int n,m;
  scanf("%d %d",&n,&m);
  struct Edge edges[m];
  for(int i = 0;i<m;i++){
  scanf("%d %d %d",&edges[i].u,&egdes[i].v,&edges[i].w);
    }
    int src;
    scanf("%d",&src);
    int dist[n];
    for (int i=0;i<n;i++)
    dist[i] = INT_MAX;
    dist[src]=0;
     for (int i=1;i<=n-1;i++){
         for (int j=0;j<m;j++){
             int u=edges[i].u;
             int v=edges[i].v;
             int w=edges[i].w;
             if(dist[u] ! =INT_MAX && dist[u] + w < dist[v]){
             dist[v]=dist[u]+w;
     }

for(int i=0;i<n;i++){
    if(dist[i]==INT_MAX)
    printf("INF ");
    else
    printf("%d",dist[i]);
}
    printf("\n");
    return 0;
         }