#include<bits/stdc++.h>
using namespace std;
#define a2 array<long long,2>
class ShortestRoutesI{
int n,m;
vector<a2>*graph;
vector<long long>minDistance;
public:
ShortestRoutesI(int n,int m,vector<a2>*graph){
this->n=n;
this->m=m;
this->graph=graph;
minDistance.resize(n+1,1e18);
minDistance[1]=0;
}
vector<long long> getShortPath(){
int city,weight;
priority_queue<a2,vector<a2>,greater<a2>>que;
que.push({0,1});
int cnt=0;
while(!que.empty()){
city=que.top()[1];
weight=que.top()[0];
que.pop();
if(minDistance[city]<weight)continue;
for(auto &cityb:graph[city]){
if(minDistance[city]+cityb[0]<minDistance[cityb[1]]){
minDistance[cityb[1]]=minDistance[city]+cityb[0];
que.push({minDistance[cityb[1]],cityb[1]});
}
}
}
return minDistance;
}
};
int main(){
int n,m;
cin>>n>>m;
int citya,cityb,length;
vector<a2>graph[n+1];
for(int connection=1;connection<=m;connection++){
cin>>citya>>cityb>>length;
graph[citya].push_back({length,cityb});
}
ShortestRoutesI route(n,m,graph);
vector<long long>path=route.getShortPath();
for(int city=1;city<=n;city++){
cout<<path[city]<<" ";
}
}