// yukicoder: 30 たこやき工場 // 2019.8.27 bal4u #include #if 1 #define gc() getchar_unlocked() #define pc(c) putchar_unlocked(c) #else #define gc() getchar() #define pc(c) putchar(c) #endif int in() { // 非負整数の入力 int n = 0, c = gc(); do n = 10 * n + (c & 0xf); while ((c = gc()) >= '0'); return n; } void out(unsigned n) { // 非負整数の表示(出力) int i; char b[30]; if (!n) pc('0'); else { i = 0; while (n) b[i++] = n % 10 + '0', n /= 10; while (i--) pc(b[i]); } } #define MAX 103 int N; int hi[MAX], to[MAX][MAX], Q[MAX][MAX]; unsigned unit[MAX], ans[MAX]; unsigned dfs(int k) { int i; if (unit[k] == 0) { if (hi[k] == 0) unit[k] = 1; else for (i = 0; i < hi[k]; i++) unit[k] += dfs(to[k][i]); } return unit[k]; } void req(int k, int q) { int i; ans[k] += unit[k]*q; for (i = 0; i < hi[k]; i++) req(to[k][i], Q[k][i]*q); } int main() { int i, M; N = in(), M = in(); while (M--) { int k, p = in(), q = in(), r = in(); k = hi[r]++, to[r][k] = p, Q[r][k] = q; } for (i = N; i >= 1; i--) dfs(i); for (i = 0; i < hi[N]; i++) req(to[N][i], Q[N][i]); for (i = 1; i < N; i++) { if (hi[i]) pc('0'); else out(ans[i]); pc('\n'); } return 0; }