#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> ii;
const int INF = 1e9;
const ll LINF = 1e18;
template<typename T>
bool minimize(T& a, const T& b) {
if (b < a) {a = b; return true;}
return false;
}
const int N = 1e5 + 5;
int n, m;
vector<ii> adj[N];
struct Node {
int u; ll d;
bool operator<(const Node& other) const {
return d > other.d;
}
};
ll dist[N]; // dist[u] = Đường đi ngắn nhất từ s đến u
void dijkstra(int s) {
for (int u = 1; u <= n; u++) dist[u] = LINF;
priority_queue<Node> pq;
dist[s] = 0;
pq.push({s, dist[s]});
while (!pq.empty()) {
Node front = pq.top(); pq.pop();
ll d = front.d; int u = front.u;
if (d > dist[u]) continue;
for (ii v : adj[u]) {
if (minimize(dist[v.first], dist[u] + v.second)) {
pq.push({v.first, dist[v.first]});
}
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m;
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
adj[u].push_back({v, w});
}
dijkstra(1);
for (int u = 1; u <= n; u++) {
cout << dist[u] << ' ' ;
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+IAoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsgIAoKdHlwZWRlZiBsb25nIGxvbmcgbGw7ICAKdHlwZWRlZiBwYWlyPGludCwgaW50PiBpaTsgIAoKY29uc3QgaW50IElORiA9IDFlOTsgIApjb25zdCBsbCBMSU5GID0gMWUxODsgIAoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KYm9vbCBtaW5pbWl6ZShUJiBhLCBjb25zdCBUJiBiKSB7CglpZiAoYiA8IGEpIHthID0gYjsgcmV0dXJuIHRydWU7fQoJcmV0dXJuIGZhbHNlOyAKfQoKY29uc3QgaW50IE4gPSAxZTUgKyA1OyAKCmludCBuLCBtOyAgCnZlY3RvcjxpaT4gYWRqW05dOyAKCnN0cnVjdCBOb2RlIHsKCWludCB1OyBsbCBkOyAgCglib29sIG9wZXJhdG9yPChjb25zdCBOb2RlJiBvdGhlcikgY29uc3QgewoJCXJldHVybiBkID4gb3RoZXIuZDsgCgl9Cn07IAoKbGwgZGlzdFtOXTsgLy8gZGlzdFt1XSA9IMSQxrDhu51uZyDEkWkgbmfhuq9uIG5o4bqldCB04burIHMgxJHhur9uIHUKCnZvaWQgZGlqa3N0cmEoaW50IHMpIHsKCWZvciAoaW50IHUgPSAxOyB1IDw9IG47IHUrKykgZGlzdFt1XSA9IExJTkY7IAoKCXByaW9yaXR5X3F1ZXVlPE5vZGU+IHBxOyAgCglkaXN0W3NdID0gMDsgICAKCXBxLnB1c2goe3MsIGRpc3Rbc119KTsgIAoKCXdoaWxlICghcHEuZW1wdHkoKSkgewoJCU5vZGUgZnJvbnQgPSBwcS50b3AoKTsgcHEucG9wKCk7ICAKCQlsbCBkID0gZnJvbnQuZDsgaW50IHUgPSBmcm9udC51OyAgCgoJCWlmIChkID4gZGlzdFt1XSkgY29udGludWU7ICAKCgkJZm9yIChpaSB2IDogYWRqW3VdKSB7CgkJCWlmIChtaW5pbWl6ZShkaXN0W3YuZmlyc3RdLCBkaXN0W3VdICsgdi5zZWNvbmQpKSB7CgkJCQlwcS5wdXNoKHt2LmZpcnN0LCBkaXN0W3YuZmlyc3RdfSk7CgkJCX0KCQl9Cgl9Cn0KCmludCBtYWluKCkgewoJaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOyAKCWNpbi50aWUobnVsbHB0cik7IAkKCWNpbiA+PiBuID4+IG07IAoKCWZvciAoaW50IGkgPSAwOyBpIDwgbTsgaSsrKSB7CgkJaW50IHUsIHYsIHc7IAoJCWNpbiA+PiB1ID4+IHYgPj4gdzsgCgkJYWRqW3VdLnB1c2hfYmFjayh7diwgd30pOyAKCX0KCglkaWprc3RyYSgxKTsgCgoJZm9yIChpbnQgdSA9IDE7IHUgPD0gbjsgdSsrKSB7CgkJY291dCA8PCBkaXN0W3VdIDw8ICcgJyA7IAoJfQp9