#include <fstream>
#include <vector>
#define NMAX 50002
using namespace std;
ifstream fin("dijkstra.in");
ofstream fout("dijkstra.out");
int N,M,d[NMAX],viz[NMAX];
vector<vector<pair<int,int>>>graph(NMAX+1);
void citire()
{
int a,b,c;
fin>>N>>M;
for(int i=1; i<=M; i++)
{
fin>>a>>b>>c;
graph[a].push_back({b,c});
graph[b].push_back({b,c});
}
}
int main()
{
citire();
d[1]=0;
viz[1]=1;
for(int i=1; i<=N; i++)
{
int vmin,nod;
nod=0;
vmin=1000000002;
for(int j=1; j<=N; j++)
{
if(!viz[j] && d[j]<vmin)
{
vmin=d[j];
nod=j;
}
}
viz[nod]=1;
for(int j=0; j<=graph[nod].size(); j++)
{
int x,y;
x=graph[nod][j].first();
y=graph[nod][j].second();
if(!viz[] && d[nod]+graph[nod][j].second()<d[j])
{
d[j]=d[nod]+graph[nod][j].second();
}
}
}
for(int i=2; i<=N; i++)
{
fout<< d[i] << " ";
}
fout<< "\n";
return 0;
}