#include using namespace std; void fast_io() { ios::sync_with_stdio(false); std::cin.tie(nullptr); } const long long INF = 1e18; vector dist(int s, vector>> &g) { vector d(g.size(), INF); d[s] = 0; priority_queue, vector>, greater<>> q; q.push({0, s}); while (!q.empty()) { auto [d_v, v] = q.top(); q.pop(); if (d_v != d[v]) { continue; } for (auto [to, w] : g[v]) { if (d[to] > d[v] + w) { d[to] = d[v] + w; q.push({d[to], to}); } } } return d; } int main() { fast_io(); int n, m; cin >> n >> m; vector>> g(n), g_rev(n); for (int i = 0; i < m; i++) { int u, v, t; cin >> u >> v >> t; u--; v--; g[u].push_back({v, t}); g_rev[v].push_back({u, t}); } auto dist_1 = dist(n - 2, g); auto dist_2 = dist(n - 1, g); auto dist_1_rev = dist(n - 2, g_rev); auto dist_2_rev = dist(n - 1, g_rev); for (int k = 0; k < n - 2; k++) { long long ans = INF; // k to n - 2 to n - 1 to k ans = min(ans, dist_1_rev[k] + dist_1[n - 1] + dist_2[k]); // k to n - 1 to n - 2 to k ans = min(ans, dist_2_rev[k] + dist_2[n - 2] + dist_1[k]); if (ans == INF) { cout << -1 << endl; } else { cout << ans << endl; } } }