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