#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
vector<vector<pii>> adj(100005);
vector<ll> ran;
ll pref1[100005], pref2[100005], pref3[100005], pref4[100005], pref5[100005], pref6[100005];
ll ogw[100005], val[100005], ans[100005];
int siz[100005], del[100005], nw[100005];
const ll mod = 998244353;
int n;
void dfssize(int u, int p){
siz[u] = 1;
for (pii e : adj[u]){
int v = e.second;
if (v == p || del[v]) continue;
dfssize(v, u);
siz[u] += siz[v];
}
}
int dfscentroid(int u, int p, int m){
for (pii e : adj[u]){
int v = e.second;
if (v == p || del[v]) continue;
if (siz[v]*2 > m) return dfscentroid(v, u, m);
}
return u;
}
void dfs1(int u, int p){
for (pii e : adj[u]){
int i = e.first, v = e.second;
if (v == p || del[v]) continue;
ran.push_back(ogw[i]);
dfs1(v, u);
}
}
void dfs2(int u, int p){
for (pii e : adj[u]){
int i = e.first, v = e.second;
if (v == p || del[v]) continue;
int d = distance(ran.begin(), lower_bound(ran.begin(), ran.end(), ogw[i], greater<ll>()))+1;
nw[i] = d;
val[d] = ogw[i];
dfs2(v, u);
}
}
void dfs3(int u, int p, int h, int res){
pref1[res] = (pref1[res] + h)%mod;
pref2[res] = (pref2[res] + (ll)h*h)%mod;
pref3[res] = (pref3[res] + val[res]*h)%mod;
pref4[res] = (pref4[res] + val[res]*h*h)%mod;
pref5[res]++;
pref6[res] = (pref6[res] + val[res])%mod;
for (pii e : adj[u]){
int i = e.first, v = e.second;
if (v == p || del[v]) continue;
int nres = res;
if (val[res] > ogw[i] || !res) nres = nw[i];
dfs3(v, u, h+1, nres);
}
}
void dfs4(int u, int p, int h, int res, int l){
ans[u] = (ans[u] + ((val[res]*(pref5[res]-1))%mod*h)%mod*h*l)%mod;
ans[u] = (ans[u] + ((pref6[ran.size()]-pref6[res])*h)%mod*h*l)%mod;
if (ans[u] < 0) ans[u] += mod;
for (pii e : adj[u]){
int i = e.first, v = e.second;
if (v == p || del[v]) continue;
int nres = res;
if (val[res] > ogw[i] || !res) nres = nw[i];
dfs4(v, u, h+1, nres, l);
}
}
void dfs5(int u, int p, int h, int res, int l){
ans[u] = (ans[u] + (val[res]*pref2[res])%mod*l)%mod;
ans[u] = (ans[u] + (val[res]*pref1[res])%mod*2*h*l)%mod;
ans[u] = (ans[u] + (pref4[ran.size()]-pref4[res])*l)%mod;
ans[u] = (ans[u] + (pref3[ran.size()]-pref3[res])*2*h*l)%mod;
if (ans[u] < 0) ans[u] += mod;
for (pii e : adj[u]){
int i = e.first, v = e.second;
if (v == p || del[v]) continue;
int nres = res;
if (val[res] > ogw[i] || !res) nres = nw[i];
dfs5(v, u, h+1, nres, l);
}
}
void decompose(int u){
dfssize(u, 0);
int centroid = dfscentroid(u, 0, siz[u]);
dfs1(centroid, 0);
sort(ran.begin(), ran.end(), greater<ll>());
ran.erase(unique(ran.begin(), ran.end()), ran.end());
dfs2(centroid, 0);
dfs3(centroid, 0, 0, 0);
for (int i = 1; i <= ran.size(); i++){
pref1[i] = (pref1[i] + pref1[i-1])%mod;
pref2[i] = (pref2[i] + pref2[i-1])%mod;
pref3[i] = (pref3[i] + pref3[i-1])%mod;
pref4[i] = (pref4[i] + pref4[i-1])%mod;
pref5[i] = (pref5[i] + pref5[i-1])%mod;
pref6[i] = (pref6[i] + pref6[i-1])%mod;
}
dfs4(centroid, 0, 0, 0, 1);
dfs5(centroid, 0, 0, 0, 1);
for (int i = 0; i <= ran.size(); i++){
pref1[i] = pref2[i] = pref3[i] = pref4[i] = pref5[i] = pref6[i] = 0;
}
ran.clear();
dfssize(centroid, 0);
for (pii e : adj[centroid]){
int i = e.first, v = e.second;
if (del[v]) continue;
dfs1(v, centroid);
ran.push_back(ogw[i]);
sort(ran.begin(), ran.end(), greater<ll>());
ran.erase(unique(ran.begin(), ran.end()), ran.end());
int d = distance(ran.begin(), lower_bound(ran.begin(), ran.end(), ogw[i], greater<ll>()))+1;
nw[i] = d;
val[d] = ogw[i];
dfs2(v, centroid);
dfs3(v, centroid, 1, nw[i]);
for (int i = 1; i <= ran.size(); i++){
pref1[i] = (pref1[i] + pref1[i-1])%mod;
pref2[i] = (pref2[i] + pref2[i-1])%mod;
pref3[i] = (pref3[i] + pref3[i-1])%mod;
pref4[i] = (pref4[i] + pref4[i-1])%mod;
pref5[i] = (pref5[i] + pref5[i-1])%mod;
pref6[i] = (pref6[i] + pref6[i-1])%mod;
}
dfs4(v, centroid, 1, nw[i], -1);
dfs5(v, centroid, 1, nw[i], -1);
for (int i = 0; i <= ran.size(); i++){
pref1[i] = pref2[i] = pref3[i] = pref4[i] = pref5[i] = pref6[i] = 0;
}
ran.clear();
}
del[centroid] = 1;
for (pii e : adj[centroid]){
int v = e.second;
if (del[v]) continue;
decompose(v);
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
freopen("netw.inp", "r", stdin);
freopen("netw.out", "w", stdout);
cin >> n;
for (int i = 1; i < n; i++){
int u, v; ll w; cin >> u >> v >> w;
adj[u].push_back({i, v});
adj[v].push_back({i, u});
ogw[i] = w;
}
decompose(1);
for (int i = 1; i <= n; i++) cout << ans[i] << '\n';
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwp1c2luZyBwaWkgPSBwYWlyPGludCwgaW50PjsKCnZlY3Rvcjx2ZWN0b3I8cGlpPj4gYWRqKDEwMDAwNSk7CnZlY3RvcjxsbD4gcmFuOwpsbCBwcmVmMVsxMDAwMDVdLCBwcmVmMlsxMDAwMDVdLCBwcmVmM1sxMDAwMDVdLCBwcmVmNFsxMDAwMDVdLCBwcmVmNVsxMDAwMDVdLCBwcmVmNlsxMDAwMDVdOwpsbCBvZ3dbMTAwMDA1XSwgdmFsWzEwMDAwNV0sIGFuc1sxMDAwMDVdOwppbnQgc2l6WzEwMDAwNV0sIGRlbFsxMDAwMDVdLCBud1sxMDAwMDVdOwpjb25zdCBsbCBtb2QgPSA5OTgyNDQzNTM7CmludCBuOwoKdm9pZCBkZnNzaXplKGludCB1LCBpbnQgcCl7CiAgICBzaXpbdV0gPSAxOwogICAgZm9yIChwaWkgZSA6IGFkalt1XSl7CiAgICAgICAgaW50IHYgPSBlLnNlY29uZDsKICAgICAgICBpZiAodiA9PSBwIHx8IGRlbFt2XSkgY29udGludWU7CiAgICAgICAgZGZzc2l6ZSh2LCB1KTsKICAgICAgICBzaXpbdV0gKz0gc2l6W3ZdOwogICAgfQp9CgppbnQgZGZzY2VudHJvaWQoaW50IHUsIGludCBwLCBpbnQgbSl7CiAgICBmb3IgKHBpaSBlIDogYWRqW3VdKXsKICAgICAgICBpbnQgdiA9IGUuc2Vjb25kOwogICAgICAgIGlmICh2ID09IHAgfHwgZGVsW3ZdKSBjb250aW51ZTsKICAgICAgICBpZiAoc2l6W3ZdKjIgPiBtKSByZXR1cm4gZGZzY2VudHJvaWQodiwgdSwgbSk7CiAgICB9CiAgICByZXR1cm4gdTsKfQoKdm9pZCBkZnMxKGludCB1LCBpbnQgcCl7CiAgICBmb3IgKHBpaSBlIDogYWRqW3VdKXsKICAgICAgICBpbnQgaSA9IGUuZmlyc3QsIHYgPSBlLnNlY29uZDsKICAgICAgICBpZiAodiA9PSBwIHx8IGRlbFt2XSkgY29udGludWU7CgogICAgICAgIHJhbi5wdXNoX2JhY2sob2d3W2ldKTsKICAgICAgICBkZnMxKHYsIHUpOwogICAgfQp9Cgp2b2lkIGRmczIoaW50IHUsIGludCBwKXsKICAgIGZvciAocGlpIGUgOiBhZGpbdV0pewogICAgICAgIGludCBpID0gZS5maXJzdCwgdiA9IGUuc2Vjb25kOwogICAgICAgIGlmICh2ID09IHAgfHwgZGVsW3ZdKSBjb250aW51ZTsKCiAgICAgICAgaW50IGQgPSBkaXN0YW5jZShyYW4uYmVnaW4oKSwgbG93ZXJfYm91bmQocmFuLmJlZ2luKCksIHJhbi5lbmQoKSwgb2d3W2ldLCBncmVhdGVyPGxsPigpKSkrMTsKICAgICAgICBud1tpXSA9IGQ7CiAgICAgICAgdmFsW2RdID0gb2d3W2ldOwogICAgICAgIGRmczIodiwgdSk7CiAgICB9Cn0KCnZvaWQgZGZzMyhpbnQgdSwgaW50IHAsIGludCBoLCBpbnQgcmVzKXsKICAgIHByZWYxW3Jlc10gPSAocHJlZjFbcmVzXSArIGgpJW1vZDsKICAgIHByZWYyW3Jlc10gPSAocHJlZjJbcmVzXSArIChsbCloKmgpJW1vZDsKICAgIHByZWYzW3Jlc10gPSAocHJlZjNbcmVzXSArIHZhbFtyZXNdKmgpJW1vZDsKICAgIHByZWY0W3Jlc10gPSAocHJlZjRbcmVzXSArIHZhbFtyZXNdKmgqaCklbW9kOwogICAgcHJlZjVbcmVzXSsrOwogICAgcHJlZjZbcmVzXSA9IChwcmVmNltyZXNdICsgdmFsW3Jlc10pJW1vZDsKCiAgICBmb3IgKHBpaSBlIDogYWRqW3VdKXsKICAgICAgICBpbnQgaSA9IGUuZmlyc3QsIHYgPSBlLnNlY29uZDsKICAgICAgICBpZiAodiA9PSBwIHx8IGRlbFt2XSkgY29udGludWU7CgogICAgICAgIGludCBucmVzID0gcmVzOwogICAgICAgIGlmICh2YWxbcmVzXSA+IG9nd1tpXSB8fCAhcmVzKSBucmVzID0gbndbaV07CiAgICAgICAgZGZzMyh2LCB1LCBoKzEsIG5yZXMpOwogICAgfQp9Cgp2b2lkIGRmczQoaW50IHUsIGludCBwLCBpbnQgaCwgaW50IHJlcywgaW50IGwpewogICAgYW5zW3VdID0gKGFuc1t1XSArICgodmFsW3Jlc10qKHByZWY1W3Jlc10tMSkpJW1vZCpoKSVtb2QqaCpsKSVtb2Q7CiAgICBhbnNbdV0gPSAoYW5zW3VdICsgKChwcmVmNltyYW4uc2l6ZSgpXS1wcmVmNltyZXNdKSpoKSVtb2QqaCpsKSVtb2Q7CiAgICBpZiAoYW5zW3VdIDwgMCkgYW5zW3VdICs9IG1vZDsKCiAgICBmb3IgKHBpaSBlIDogYWRqW3VdKXsKICAgICAgICBpbnQgaSA9IGUuZmlyc3QsIHYgPSBlLnNlY29uZDsKICAgICAgICBpZiAodiA9PSBwIHx8IGRlbFt2XSkgY29udGludWU7CgogICAgICAgIGludCBucmVzID0gcmVzOwogICAgICAgIGlmICh2YWxbcmVzXSA+IG9nd1tpXSB8fCAhcmVzKSBucmVzID0gbndbaV07CiAgICAgICAgZGZzNCh2LCB1LCBoKzEsIG5yZXMsIGwpOwogICAgfQp9Cgp2b2lkIGRmczUoaW50IHUsIGludCBwLCBpbnQgaCwgaW50IHJlcywgaW50IGwpewogICAgYW5zW3VdID0gKGFuc1t1XSArICh2YWxbcmVzXSpwcmVmMltyZXNdKSVtb2QqbCklbW9kOwogICAgYW5zW3VdID0gKGFuc1t1XSArICh2YWxbcmVzXSpwcmVmMVtyZXNdKSVtb2QqMipoKmwpJW1vZDsKICAgIGFuc1t1XSA9IChhbnNbdV0gKyAocHJlZjRbcmFuLnNpemUoKV0tcHJlZjRbcmVzXSkqbCklbW9kOwogICAgYW5zW3VdID0gKGFuc1t1XSArIChwcmVmM1tyYW4uc2l6ZSgpXS1wcmVmM1tyZXNdKSoyKmgqbCklbW9kOwogICAgaWYgKGFuc1t1XSA8IDApIGFuc1t1XSArPSBtb2Q7CgogICAgZm9yIChwaWkgZSA6IGFkalt1XSl7CiAgICAgICAgaW50IGkgPSBlLmZpcnN0LCB2ID0gZS5zZWNvbmQ7CiAgICAgICAgaWYgKHYgPT0gcCB8fCBkZWxbdl0pIGNvbnRpbnVlOwoKICAgICAgICBpbnQgbnJlcyA9IHJlczsKICAgICAgICBpZiAodmFsW3Jlc10gPiBvZ3dbaV0gfHwgIXJlcykgbnJlcyA9IG53W2ldOwogICAgICAgIGRmczUodiwgdSwgaCsxLCBucmVzLCBsKTsKICAgIH0KfQoKdm9pZCBkZWNvbXBvc2UoaW50IHUpewogICAgZGZzc2l6ZSh1LCAwKTsKICAgIGludCBjZW50cm9pZCA9IGRmc2NlbnRyb2lkKHUsIDAsIHNpelt1XSk7CgogICAgZGZzMShjZW50cm9pZCwgMCk7CiAgICBzb3J0KHJhbi5iZWdpbigpLCByYW4uZW5kKCksIGdyZWF0ZXI8bGw+KCkpOwogICAgcmFuLmVyYXNlKHVuaXF1ZShyYW4uYmVnaW4oKSwgcmFuLmVuZCgpKSwgcmFuLmVuZCgpKTsKICAgIGRmczIoY2VudHJvaWQsIDApOwogICAgZGZzMyhjZW50cm9pZCwgMCwgMCwgMCk7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSByYW4uc2l6ZSgpOyBpKyspewogICAgICAgIHByZWYxW2ldID0gKHByZWYxW2ldICsgcHJlZjFbaS0xXSklbW9kOwogICAgICAgIHByZWYyW2ldID0gKHByZWYyW2ldICsgcHJlZjJbaS0xXSklbW9kOwogICAgICAgIHByZWYzW2ldID0gKHByZWYzW2ldICsgcHJlZjNbaS0xXSklbW9kOwogICAgICAgIHByZWY0W2ldID0gKHByZWY0W2ldICsgcHJlZjRbaS0xXSklbW9kOwogICAgICAgIHByZWY1W2ldID0gKHByZWY1W2ldICsgcHJlZjVbaS0xXSklbW9kOwogICAgICAgIHByZWY2W2ldID0gKHByZWY2W2ldICsgcHJlZjZbaS0xXSklbW9kOwogICAgfQogICAgZGZzNChjZW50cm9pZCwgMCwgMCwgMCwgMSk7CiAgICBkZnM1KGNlbnRyb2lkLCAwLCAwLCAwLCAxKTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHJhbi5zaXplKCk7IGkrKyl7CiAgICAgICAgcHJlZjFbaV0gPSBwcmVmMltpXSA9IHByZWYzW2ldID0gcHJlZjRbaV0gPSBwcmVmNVtpXSA9IHByZWY2W2ldID0gMDsKICAgIH0KICAgIHJhbi5jbGVhcigpOwoKICAgIGRmc3NpemUoY2VudHJvaWQsIDApOwogICAgZm9yIChwaWkgZSA6IGFkaltjZW50cm9pZF0pewogICAgICAgIGludCBpID0gZS5maXJzdCwgdiA9IGUuc2Vjb25kOwogICAgICAgIGlmIChkZWxbdl0pIGNvbnRpbnVlOwoKICAgICAgICBkZnMxKHYsIGNlbnRyb2lkKTsKICAgICAgICByYW4ucHVzaF9iYWNrKG9nd1tpXSk7CiAgICAgICAgc29ydChyYW4uYmVnaW4oKSwgcmFuLmVuZCgpLCBncmVhdGVyPGxsPigpKTsKICAgICAgICByYW4uZXJhc2UodW5pcXVlKHJhbi5iZWdpbigpLCByYW4uZW5kKCkpLCByYW4uZW5kKCkpOwogICAgICAgIGludCBkID0gZGlzdGFuY2UocmFuLmJlZ2luKCksIGxvd2VyX2JvdW5kKHJhbi5iZWdpbigpLCByYW4uZW5kKCksIG9nd1tpXSwgZ3JlYXRlcjxsbD4oKSkpKzE7CiAgICAgICAgbndbaV0gPSBkOwogICAgICAgIHZhbFtkXSA9IG9nd1tpXTsKICAgICAgICBkZnMyKHYsIGNlbnRyb2lkKTsKICAgICAgICBkZnMzKHYsIGNlbnRyb2lkLCAxLCBud1tpXSk7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gcmFuLnNpemUoKTsgaSsrKXsKICAgICAgICAgICAgcHJlZjFbaV0gPSAocHJlZjFbaV0gKyBwcmVmMVtpLTFdKSVtb2Q7CiAgICAgICAgICAgIHByZWYyW2ldID0gKHByZWYyW2ldICsgcHJlZjJbaS0xXSklbW9kOwogICAgICAgICAgICBwcmVmM1tpXSA9IChwcmVmM1tpXSArIHByZWYzW2ktMV0pJW1vZDsKICAgICAgICAgICAgcHJlZjRbaV0gPSAocHJlZjRbaV0gKyBwcmVmNFtpLTFdKSVtb2Q7CiAgICAgICAgICAgIHByZWY1W2ldID0gKHByZWY1W2ldICsgcHJlZjVbaS0xXSklbW9kOwogICAgICAgICAgICBwcmVmNltpXSA9IChwcmVmNltpXSArIHByZWY2W2ktMV0pJW1vZDsKICAgICAgICB9CiAgICAgICAgZGZzNCh2LCBjZW50cm9pZCwgMSwgbndbaV0sIC0xKTsKICAgICAgICBkZnM1KHYsIGNlbnRyb2lkLCAxLCBud1tpXSwgLTEpOwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHJhbi5zaXplKCk7IGkrKyl7CiAgICAgICAgICAgIHByZWYxW2ldID0gcHJlZjJbaV0gPSBwcmVmM1tpXSA9IHByZWY0W2ldID0gcHJlZjVbaV0gPSBwcmVmNltpXSA9IDA7CiAgICAgICAgfQogICAgICAgIHJhbi5jbGVhcigpOwogICAgfQogICAgZGVsW2NlbnRyb2lkXSA9IDE7CgogICAgZm9yIChwaWkgZSA6IGFkaltjZW50cm9pZF0pewogICAgICAgIGludCB2ID0gZS5zZWNvbmQ7CiAgICAgICAgaWYgKGRlbFt2XSkgY29udGludWU7CiAgICAgICAgZGVjb21wb3NlKHYpOwogICAgfQp9CgppbnQgbWFpbigpewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwoKICAgIGZyZW9wZW4oIm5ldHcuaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJuZXR3Lm91dCIsICJ3Iiwgc3Rkb3V0KTsKCiAgICBjaW4gPj4gbjsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgaSsrKXsKICAgICAgICBpbnQgdSwgdjsgbGwgdzsgY2luID4+IHUgPj4gdiA+PiB3OwogICAgICAgIGFkalt1XS5wdXNoX2JhY2soe2ksIHZ9KTsKICAgICAgICBhZGpbdl0ucHVzaF9iYWNrKHtpLCB1fSk7CiAgICAgICAgb2d3W2ldID0gdzsKICAgIH0KICAgIGRlY29tcG9zZSgxKTsKCiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIGNvdXQgPDwgYW5zW2ldIDw8ICdcbic7Cn0K