func_code_string: #include <bits/stdc++.h>   using namespace std;   long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }   long long fpow(long long b, long long p) {     if (b == 0) return 0;     long long ans = 1;     while (p) {       if (p & 1) ans = ans * b % (998244353);       b = b * b % (998244353);       p /= 2;     }     return ans;   }   struct BIT {     long long n;     long long a[150050];     void init(long long _n) {       n = _n;       memset(a, 0, sizeof(a));     }     void add(long long i, long long x) {       while (i <= n) {         a[i] += x;         if (a[i] >= (998244353)) a[i] -= (998244353);         i += (i & (-i));       }     }     long long ask(long long l, long long r) {       long long ans = 0;       while (r > 0) {         ans += a[r];         r -= (r & (-r));       }       l--;       while (l > 0) {         ans -= a[l];         l -= (l & (-l));       }       return ans % (998244353);     }   } bit;   long long N, N1;   long long addall = 0;   vector<long long> adj[150010];   long long sz[150010];   long long p[150010];   long long nxt[150010];   long long id[150010];   long long head[150010];   long long add[150010];   long long info(long long n, long long par) {     sz[n] = 1;     p[n] = par;     pair<long long, long long> mx(0, 0);     for (auto &i : adj[n])       if (i != par) {         mx = max(mx, make_pair(info(i, n), i));         sz[n] += sz[i];       }     nxt[n] = mx.second;     return sz[n];   }   void hld(long long n, long long h) {     static long long nowid = 1;     id[n] = nowid;     nowid++;     head[n] = h;     if (nxt[n] != 0) hld(nxt[n], h);     for (auto &i : adj[n])       if (i != p[n] && i != nxt[n]) {         hld(i, i);       }   }   long long ask(long long n) {     long long ans = addall + add[n];     while (n != 0) {       ans += bit.ask(id[head[n]], id[n]);       n = head[n];       ans = (ans + add[p[n]] * (N - sz[n]) % (998244353) * N1) % (998244353);       n = p[n];     }     return ans;   }   signed main() {     {       ;       ;       ;       ios::sync_with_stdio(false);       cin.tie(0);       ;       ;       ;     }     cin >> N;     long long q;     cin >> q;     N1 = fpow(N, (998244353) - 2);     for (long long i = 1; i <= N - 1; i++) {       long long a, b;       cin >> a >> b;       adj[a].emplace_back(b);       adj[b].emplace_back(a);     }     bit.init(N);     info(1, 0);     hld(1, 1);     while (q--) {       long long op;       cin >> op;       if (op == 1) {         long long v, x;         cin >> v >> x;         addall = (addall + x * sz[v] % (998244353) * N1) % (998244353);         add[v] = (add[v] + x) % (998244353);         bit.add(id[v], -x * sz[v] % (998244353) * N1 % (998244353));         if (nxt[v] != 0) {           bit.add(id[nxt[v]],                   x * (N - sz[nxt[v]]) % (998244353) * N1 % (998244353));         }       } else {         long long v;         cin >> v;         long long ans = addall + add[v];         while (v != 0) {           ans += bit.ask(id[head[v]], id[v]);           v = head[v];           ans = (ans + add[p[v]] * (N - sz[v]) % (998244353) * N1) % (998244353);           v = p[v];         }         cout << (ans + (998244353)) % (998244353) <<   n ;       }     }     return 0;   }   