#include <iostream>
#include <vector>
using namespace std;
const int INF = 987654321;
const int MAX = 500;
int N, M;
struct Edge
{
int u, v, w;
};
vector<Edge> edge;
long long dist[MAX + 1];
int main()
{
ios_base::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;
edge.push_back({ u,v,w });
}
for (int i = 1; i <= N; i++) {
dist[i] = INF;
}
dist[1] = 0;
for (int i = 1; i <= N - 1; i++)
{
for (int j = 0; j < M; j++)
{
int u = edge[j].u;
int v = edge[j].v;
int w = edge[j].w;
if (dist[u] == INF) continue;
if (dist[v] > dist[u] + w) dist[v] = dist[u] + w;
}
}
for (int i = 0; i < M; i++)
{
int u = edge[i].u;
int v = edge[i].v;
int w = edge[i].w;
if (dist[u] == INF) continue;
if (dist[v] > dist[u] + w)
{
cout << -1 << '\n';
return 0;
}
}
for (int i = 2; i <= N; i++)
{
if (dist[i] == INF) cout << -1 << '\n';
else cout << dist[i] << '\n';
}
return 0;
}