#include <bits/stdc++.h>
#define pii pair <int,int>
using namespace std;
ifstream f("dijkstra.in");
ofstream g("dijkstra.out");
int n,m,cost[1<<16];
bool inHeap[1<<16];
struct cmp
{ bool operator()(int x,int y)
{ return cost[x]>cost[y]; }
};
vector <pii> v[1<<16];
priority_queue <int,vector<int>,cmp> heap;
int main()
{ f>>n>>m;
for(int x,y,c; f>>x>>y>>c; v[x].push_back(make_pair(y,c)));
heap.push(1);
for(int i=2; i<=n; i++)
cost[i]=1<<30;
for(; !heap.empty(); heap.pop())
{ int nod=heap.top();
inHeap[nod]=0;
vector <pii> :: iterator it;
for(it=v[nod].begin(); it!=v[nod].end(); it++)
if(cost[nod]+it->second<cost[it->first])
{ cost[it->first]=cost[nod]+it->second;
if(!inHeap[it->first])
{ inHeap[it->first]=1;
heap.push(it->first);
}
}
}
for(int i=2; i<=n; i++)
g<<(cost[i]==1<<30 ? 0 : cost[i])<<' ';
g.close(); return 0;
}