#include <iostream>
#include <vector>
#include <queue>

#define SUBMIT 1

using namespace std;

constexpr long long INF = 1E17;

struct Edge {
    int v;
    long long weight;
};

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    vector<vector<Edge>> adj(N);

    for (int i = 0; i < M; i++) {
        adj[X[i]].push_back({Y[i], P[i]});
    }

    priority_queue<pair<long long, int>> pq;
    vector<bool> vis(N, false);

    fill(D.begin(), D.end(), INF);

    pq.push({0, 0});
    D[0] = 0;
    
    while (pq.empty() == false) {
        int u = pq.top().second;
        pq.pop();

        if (vis[u] == true) continue;
        vis[u] = true;

        for (const Edge &e : adj[u]) {
            if (D[u] + e.weight < D[e.v]) {
                D[e.v] = D[u] + e.weight;

                pq.push({-D[e.v], e.v});
            }
        }
    }

    for (int i = 0; i < N; i++) {
        if (D[i] == INF) {
            D[i] = -1;
        }
    }
};

#ifndef SUBMIT
int main() {
    freopen("input.txt", "r", stdin);

    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
