#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pll = pair<ll, ll>;

void mincammino(int n, int m, vector<int> x, vector<int> y, vector<int> p, vector<ll>& d) {
	for(auto &i:d) i = -1;
	
	vector<vector<pll>> graph(n);
	
	for(int i = 0; i < m; i++) {
		int a = x[i], b = y[i], w = p[i];
		graph[a].push_back({b, w});
	}
	
	priority_queue<pll, vector<pll>, greater<pll>> pq;
	pq.push({0, 0});
	
	while(!pq.empty()){
		auto [dist, nodo] = pq.top();
		pq.pop();
		
		if(d[nodo] != -1) continue;
		d[nodo] = dist;
		
		for(auto [node, dis]:graph[nodo]) {
			if(d[node] == -1) pq.push({dist+dis, node});
		}
	}
	
	return;
}

#ifndef EVAL

int main() {
    int N, M;
    cin >> N >> M;

    vector<int> X(M), Y(M), P(M);
    vector<long long> D(N);

    for (int i = 0; i < M; i++) {
        cin >> X[i] >> Y[i] >> P[i];
    }

    mincammino(N, M, X, Y, P, D);

    for (int i = 0; i < N; i++) {
        cout << D[i] << ' ';
    }
    cout << '\n';
}

#endif
