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

const long long INF = numeric_limits<long long>::max();
void mincammino(int n, int M, vector<int> da, vector<int> a, vector<int> peso, vector<long long>& dist) {
    vector<vector<pair<int,int> > >grafo(n);
    for(int i=0;i<M;i++){
    	grafo[da[i]].emplace_back(a[i],peso[i]);
	}
	dist.assign(n,INF);
	dist[0] = 0;
	priority_queue<pair<long long,int>,vector<pair<long long,int> >,greater<> > coda;
	coda.emplace(0, 0);
	
	while(!coda.empty()){
		auto[d,u] = coda.top();
		coda.pop();
		if(d < dist[u])continue;
		
		for(auto[v,p] : grafo[u]){
			if(dist[u] + p < dist[v]){
				dist[v] = dist[u]+p;
				coda.emplace(dist[v],v);
			}
		}
	}
	
	for(int i=0;i<n;i++){
		if(dist[i] == INF) dist[i] = -1;
	}
}
