#include<bits/stdc++.h> using namespace std; #define ll long long #define P pair<int,int> const ll INF=1e18; const int N=2e5+10; int head[N],ver[N],edge[N],Next[N],n,m,tot,v[N]; ll d[N]; void add(int x,int y,int z) { ver[++tot]=y; edge[tot]=z; Next[tot]=head[x]; head[x]=tot; } void dijkstra(int s) { priority_queue<pair<ll,int> >q; for(int i=1;i<=n;i++) { d[i]=INF; v[i]=0; } d[s]=0; q.push(make_pair(0,s)); while(q.size()) { int x=q.top().second; q.pop(); if(v[x]) continue; v[x]=1; for(int i=head[x];i;i=Next[i]) { int y=ver[i],z=edge[i]; if(d[y]>d[x]+z) { d[y]=d[x]+z; q.push(make_pair(-d[y],y)); } } } } int main() { int T,x,y,z,s; cin>>n>>m>>s; for(int i=1;i<=m;i++) { cin>>x>>y>>z; add(x,y,z); } dijkstra(s); for(int i=1;i<=n;i++) { printf("%lld ",d[i]); } return 0; }