func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   const int maxn = 2e5 + 5, mod = 998244353;   vector<int> vs[maxn];   inline int add(int x, int y) { return (x + y) % mod; }   inline int mul(int x, int y) { return (1ll * x * y) % mod; }   int fpow(int a, int b) {     int res = 1;     for (; b > 0; a = mul(a, a), b >>= 1)       if (b & 1) res = mul(res, a);     return res;   }   int n, f[maxn], fi[maxn], inv[maxn], in[maxn][2], ch[maxn], out[maxn],       ans[maxn];   void init() {     f[0] = 1;     for (int i = 1; i < maxn; i++) f[i] = mul(f[i - 1], i);     fi[maxn - 1] = fpow(f[maxn - 1], mod - 2);     fi[0] = 1;     for (int i = maxn - 2; i > 0; i--) {       fi[i] = mul(fi[i + 1], i + 1);       inv[i] = mul(fi[i], f[i - 1]);     }   }   void chadd(int &x, int y) { x = add(x, y); }   void chmul(int &x, int y) { x = mul(x, y); }   void dfs_in(int v, int p = -1) {     in[v][0] = 1;     for (int e : vs[v])       if (e != p) {         dfs_in(e, v);         chmul(in[v][0], in[e][1]);         ch[v]++;       }     in[v][1] = mul(in[v][0], mul(f[ch[v]], ch[v] + 1));   }   int total = 0;   void dfs_out(int v, int p = -1) {     ans[v] = mul(in[v][0], mul(out[v], f[ch[v] + (p != -1)]));     chadd(total, ans[v]);     int coef = p == -1                    ? mul(mul(fi[ch[v]], inv[ch[v] + 1]), mul(f[ch[v] - 1], ch[v]))                    : 1;     for (int e : vs[v])       if (e != p) {         out[e] = mul(mul(in[v][1], fpow(in[e][1], mod - 2)), out[v]);         chmul(out[e], coef);         dfs_out(e, v);       }   }   int main() {     init();     scanf( %d , &n);     for (int i = 1, x, y; i < n; i++) {       scanf( %d %d , &x, &y);       vs[x].emplace_back(y);       vs[y].emplace_back(x);     }     dfs_in(1);     out[1] = 1;     ans[1] = in[1][0];     dfs_out(1);     printf( %d n , total);     return 0;   }   