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

struct edge{
	int inizio,fine;
	long long peso;	
};


void mincammino(int N, int M, vector<int> X, vector<int> Y, vector<int> P, vector<long long>&D) {
	fill(D.begin(),D.end(),LLONG_MAX);
	vector<vector<edge>> adj(N);
	for(int i=0;i<M;i++){
		edge e;
		e.inizio=X[i];
		e.fine=Y[i];
		e.peso=P[i];
		adj[e.inizio].push_back(e);
	}
	priority_queue<pair<long long,int>> q;
	vector<bool> v(N,false);
	q.push({0,0});
	D[0]=0;
	while(!q.empty()){
		int a=q.top().second;
		long long p=-q.top().first;
		q.pop();
		if(v[a]) continue;
		v[a]=true;
		for(auto b:adj[a]){
			int i=b.fine;
			if(v[i]) continue;
			D[i]=min(D[i],D[a]+b.peso);
			q.push({-D[i],i});
		}
	}
	for(auto &a:D){
		if(a==LLONG_MAX){
			a=-1;
		}
	}
}
/*
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';
}
*/