#include <bits/stdc++.h>
using namespace std;

struct Path {
    int dest;
    long long len;

    bool operator<(const Path& other) const {
        return len > other.len;
    }
};

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    vector<vector<pair<int, int>>> graph(N);

    for (int i = 0; i < M; i++) {
        graph[X[i]].push_back({Y[i], P[i]});
    }

    for (int i = 0; i < N; i++) {
        D[i] = -1;
    }

    priority_queue<Path> pq;
    vector<bool> visited(N);

    pq.push({0, 0});
    while (!pq.empty()) {
        auto [node, dist] = pq.top();
        pq.pop();

        if (visited[node]) continue;
        visited[node] = 1;

        D[node] = dist;

        for (auto [node2, weight] : graph[node]) {
            pq.push({node2, dist + weight});
        }
    }
}

/*
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';
}
*/