#include <bits/stdc++.h>

using namespace std;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    vector<vector<pair<long long, int>>> adj(N);   //peso, nodo
    for (int i = 0; i < M; i++) {
        adj[X[i]].push_back(pair(P[i], Y[i]));
    }
    fill(D.begin(), D.end(), LLONG_MAX);
    D[0] = 0;
    priority_queue<pair<long long, int>, vector<pair<long long, int>>, greater<>> pq;
    pq.push(pair(0, 0));
    vector<int> visti(N);
    while (!pq.empty()) {
      auto curr = pq.top();
      pq.pop();
      if (visti[curr.second]) continue;
      visti[curr.second] = true;
      for(auto connessione : adj[curr.second]) {
          if (D[connessione.second] > D[curr.second] + connessione.first) {
              D[connessione.second] = D[curr.second] + connessione.first;
              pq.push(pair(D[connessione.second], connessione.second));   //distanza fino al nodo, nodo
          }
      }
    }
    for (int i = 0; i < N; i++) if (D[i]==LLONG_MAX) D[i]=-1;
    return;
}

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