int n; int C[kMaxN][kMaxN], sz[kMaxN], f[kMaxN][kMaxN][kMaxN], g[kMaxN][kMaxN], h[kMaxN][kMaxN]; std::vector<int> G[kMaxN];
intqpow(int bs, int64_t idx = kMod - 2){ int ret = 1; for (; idx; idx >>= 1, bs = (int64_t)bs * bs % kMod) if (idx & 1) ret = (int64_t)ret * bs % kMod; return ret; }
inlineintadd(int x, int y){ return (x + y >= kMod ? x + y - kMod : x + y); } inlineintsub(int x, int y){ return (x >= y ? x - y : x - y + kMod); } inlinevoidinc(int &x, int y){ (x += y) >= kMod ? x -= kMod : x; } inlinevoiddec(int &x, int y){ (x -= y) < 0 ? x += kMod : x; }
voidprework(int n = 80){ C[0][0] = 1; for (int i = 1; i <= n; ++i) { C[i][0] = 1; for (int j = 1; j <= i; ++j) C[i][j] = add(C[i - 1][j], C[i - 1][j - 1]); } }
voiddickdreamer(){ std::cin >> n; for (int i = 1; i <= n; ++i) G[i].clear(); for (int i = 1; i < n; ++i) { int u, v; std::cin >> u >> v; if (u > v) std::swap(u, v); G[u].emplace_back(v); } for (int u = n; u; --u) { std::fill_n(g[u], n + 1, 0); sz[u] = 0, g[u][0] = 1; for (auto v : G[u]) { staticint tmp[kMaxN]; for (int i = 0; i <= sz[u]; ++i) tmp[i] = g[u][i], g[u][i] = 0; for (int i = 0; i <= sz[u]; ++i) for (int j = 0; j <= sz[v]; ++j) inc(g[u][i + j], 1ll * C[i + j][i] * tmp[i] % kMod * g[v][j] % kMod); sz[u] += sz[v]; } ++sz[u]; for (int i = sz[u]; i; --i) inc(g[u][i], g[u][i - 1]), h[u][i] = g[u][i - 1]; } for (int i = 0; i <= n + 1; ++i) for (int j = 0; j <= n + 1; ++j) for (int k = 0; k <= n + 1; ++k) f[i][j][k] = 0; f[n + 1][0][0] = 1; for (int i = n; i; --i) { for (int j = 0; j <= n - i; ++j) { for (int k = j; k <= n; ++k) { if (i != 1) inc(f[i][j][k], f[i + 1][j][k]); for (int kk = k + 1; kk <= n - i + 1; ++kk) inc(f[i][j + 1][kk], f[i + 1][j][k]); for (int x = 1; x <= sz[i]; ++x) { if (j + x <= n) inc(f[i][j + x][k], 1ll * f[i + sz[i]][j][k] * C[k - j][x] % kMod * h[i][x] % kMod); } } } } for (int i = 1; i <= n; ++i) std::cout << f[1][i][i] << " \n"[i == n]; }