#include<fstream>
#include<vector>
#include<queue>
#include<bitset>
using namespace std;
ifstream cin("dijkstra.in");
ofstream cout("dijkstra.out");
const int M=2e9,N=1e5+1;
vector<pair<int,int>> a[N];
bitset<N> c;
int d[N],e[N];
struct C {
bool operator()(int i,int j) {
return d[i]>d[j];
}
};
priority_queue<int,vector<int>,C> b;
int main()
{
int m,n;
for(cin>>n>>m;m--;) {
int i,j,k;
cin>>i>>j>>k,a[i].push_back({j,k});
}
for(int i=2;i<=n;d[i++]=M);
for(c[1]=1,b.push(1);!b.empty();b.pop()) {
int i=b.top();
for(auto p:a[i])
if(long long j=d[i]+p.second;d[p.first]>j&&(d[p.first]=j,!c[p.first]))
c[p.first]=1,b.push(p.first);
}
for(int i=2;i<=n;cout<<(d[i]<M?d[i]:0)<<' ',++i);
return 0;
}