#include <iostream>
#include <vector>
#include <queue>
#include <list>
#include <climits>
using namespace std;
struct Edge {
int to;
int val;
Edge(int t, int w): to(t), val(w) {}
};
int main() {
int n, m, s, t, v;
cin >> n >> m;
vector<list<Edge>> grid(n + 1);
vector<int> isInQueue(n + 1);
for(int i = 0; i < m; i++){
cin >> s >> t >> v;
grid[s].push_back(Edge(t, v));
}
vector<int> minDist(n + 1 , INT_MAX);
minDist[1] = 0;
queue<int> que;
que.push(1);
while (!que.empty()) {
int cur = que.front();
que.pop();
isInQueue[cur] = false;
for (Edge edge : gr