#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';
}
