#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/library/5/GRL/1/GRL_1_A"
#include"../../template.h"
#include"../Shortest_path/Dijkstra.h"voidsolve(){intn,m,s;cin>>n>>m>>s;vector<vector<pii>>adj(n+1);for(inti=0;i<m;i++){intu,v,w;cin>>u>>v>>w;adj[u].push_back({v,w});}vector<ll>d=dijkstra(s,n,adj);for(inti=0;i<n;i++){if(d[i]==LLONG_MAX){cout<<"INF\n";}else{cout<<d[i]<<'\n';}}}
#line 1 "Graph/Aizu/aizu_grl_1_a_dijkstra.test.cpp"
#define PROBLEM "https://onlinejudge.u-aizu.ac.jp/courses/library/5/GRL/1/GRL_1_A"
#line 2 "template.h"
#include<bits/stdc++.h>usingnamespacestd;#define ll long long
#define MOD (ll)(1e9+7)
#define all(x) (x).begin(),(x).end()
#define unique(x) x.erase(unique(all(x)), x.end())
#define INF32 ((1ull<<31)-1)
#define INF64 ((1ull<<63)-1)
#define inf (ll)1e18
#define vi vector<int>
#define pii pair<int, int>
#define pll pair<ll, ll>
#define fi first
#define se second
constintmod=998244353;voidsolve();intmain(){ios_base::sync_with_stdio(false);cin.tie(NULL);// cin.exceptions(cin.failbit);// int t; cin >> t;// while(t--)solve();cerr<<"\nTime run: "<<1000*clock()/CLOCKS_PER_SEC<<"ms"<<'\n';return0;}#line 2 "Graph/Shortest_path/Dijkstra.h"
vector<ll>dijkstra(ints,intn,vector<vector<pii>>&g){vector<int>vis(n+1);vector<ll>d(n+1,LLONG_MAX);priority_queue<pii,vector<pii>,greater<pii>>pq;pq.push({d[s],s});d[s]=0;while(!pq.empty()){auto[dist,u]=pq.top();pq.pop();if(vis[u])continue;vis[u]=1;for(auto[v,w]:g[u]){if(d[v]>d[u]+w){d[v]=d[u]+w;pq.push({d[v],v});}}}returnd;}structOxyz{intx,y,z;Oxyz(int_x,int_y,int_z):x(_x),y(_y),z(_z){}booloperator<(Oxyzother)const{if(x!=other.x)returnx<other.x;if(y!=other.y)returny<other.y;returnz<other.z;}};usingplO=pair<ll,Oxyz>;intdijkstra(Oxyzs,intn,vector<vector<vector<int>>>&a){vector<vector<vector<int>>>vis(n+1,vector<vector<int>>(n+1,vector<int>(n+1,0)));vector<vector<vector<ll>>>d(n+1,vector<vector<ll>>(n+1,vector<ll>(n+1,1e9)));priority_queue<plO,vector<plO>,greater<plO>>pq;d[s.x][s.y][s.z]=0;pq.push({d[s.x][s.y][s.z],s});while(!pq.empty()){plOu=pq.top();pq.pop();auto[dist,pos]=u;auto[x,y,z]=pos;if(vis[x][y][z])continue;vis[x][y][z]=1;for(inti=-1;i<=1;i++){for(intj=-1;j<=1;j++){for(intk=-1;k<=1;k++){Oxyzv(x+i,y+j,z+k);if(abs(v.x-x)+abs(v.y-y)+abs(v.z-z)!=1)continue;if(v.x<1||v.y<1||v.z<1)continue;if(v.x>n||v.y>n||v.z>n)continue;llw=a[x+i][y+j][z+k];if(d[v.x][v.y][v.z]>dist+w){d[v.x][v.y][v.z]=dist+w;pq.push({d[v.x][v.y][v.z],v});}}}}}returnd[n][n][n];}#line 5 "Graph/Aizu/aizu_grl_1_a_dijkstra.test.cpp"
voidsolve(){intn,m,s;cin>>n>>m>>s;vector<vector<pii>>adj(n+1);for(inti=0;i<m;i++){intu,v,w;cin>>u>>v>>w;adj[u].push_back({v,w});}vector<ll>d=dijkstra(s,n,adj);for(inti=0;i<n;i++){if(d[i]==LLONG_MAX){cout<<"INF\n";}else{cout<<d[i]<<'\n';}}}