#include <iostream>
using namespace std;
#define INFINE 99999999
const int N = 1010;
bool vis[N];
int dis[N];
int graph[N][N];
void Dijkstra(int graph[][N], int v, int n) {for (int i = 1; i <= n; i++)dis[i] = graph[v][i];vis[v] = true;dis[v] = 0;for (int i = 2; i <= n; i++) {int minx = INFINE;int minid = 0;for (int j = 1; j <= n; j++) {if (!vis[j] && dis[j] < minx) {minx = dis[j];minid = j;}}vis[minid] = true;for (int k = 1; k <= n; k++) {if (graph[minid][k] < INFINE)if (dis[k] > dis[minid] + graph[minid][k])dis[k] = dis[minid] + graph[minid][k];}}for (int i = 1; i <= n; i++)cout << dis[i] << " ";cout << endl;
}int main() {int vertexnum, arcnum;cin >> vertexnum >> arcnum;for (int i = 1; i <= vertexnum; i++)for (int j = 1; j <= vertexnum; j++)graph[i][j] = INFINE;for (int i = 1; i <= arcnum; i++) {int a, b, w;cin >> a >> b >> w;graph[a][b] = w;}Dijkstra(graph, 1, vertexnum);return 0;
}