#include <vector>
#include <algorithm>
using namespace std;

const long long INF = 1e18;

void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>& D) {
    fill(D.begin(), D.end(), INF);
    D[0] = 0;
    for(;;){
      bool any = false;

      for(int i = 0; i < M; i++){
        if(D[X[i]] < INF){
          if(D[Y[i]] > D[X[i]] + P[i]){
            D[Y[i]] = D[X[i]] + P[i];
            any = true;
          }
        }
      }

      if(!any){
        break;
      }
    }
    for(int i = 0; i < N; i++){
      if(D[i] == INF){
        D[i] = -1;
      }
    }
}
