#include <cstdio>
#include <vector>
#include <queue>
#include <functional>
using namespace std;
#define inf 9999999
#define dmax 1234
#define pb push_back
#define x first
#define y second
typedef pair<int, int> pi;
vector <pi> v[dmax];
int d[dmax], pre[dmax], n, m;
priority_queue <pi, vector <pi>, less <pi> > q;
bool use[dmax];
void read()
{
freopen("dijkstra.in", "r", stdin);
freopen("dijkstra.out", "w", stdout);
int a, b, c;
scanf("%i %i ",&n, &m);
for(int i=1; i<=m; i++)
{
scanf("%i %i %i", &a, &b, &c);
v[a].pb(make_pair(c, b));
}
}
void dijkstra(int x)
{
for(int i=1; i<=n; i++)
{
pre[i]=x;
d[i]=inf;
}
q.push(make_pair(d[x], x));
d[1]=0;
while(!q.empty())
{
pi a=q.top();
use[a.y]=1;
q.pop();
for(int i=0; i<v[a.y].size(); i++)
{
if(!use[v[a.y][i].y])
{
int h=v[a.y][i].y;
if(d[h]>v[a.y][i].x+d[a.y])
{
d[h]=v[a.y][i].x+d[a.y];
q.push(v[a.y][i]);
}
//actualizez lista de min
for(int j=0;j<v[h].size();j++)
{
if(!use[v[h][j].y])
{
pi w=v[h][i];
if(d[w.y]>d[h]+w.x)
{
q.push(w);
d[w.y]=d[h]+w.x;
}
}
}
}
}
}
}
void printd()
{
for(int i=2;i<=n;i++)
printf("%i ", d[i]);
printf("\n");
}
int main()
{
read();
dijkstra(1);
printd();
return 0;
}