#include <cstdio>
#include <vector>
#include <cstring>
#include <algorithm>

#define FIO ""
#define fx first
#define fy second
#define mpar std::make_pair
#define pb push_back
#define dbug(...) fprintf(stderr, __VA_ARGS__)

typedef double db;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef std::pair<int, int> par;

template <typename Y> inline bool updmin(Y &a, Y b) {if (a > b) {a = b; return 1;} return 0;}
template <typename Y> inline bool updmax(Y &a, Y b) {if (a < b) {a = b; return 1;} return 0;}
template <typename Y> inline Y abs(Y a) {if (a < 0) a = -a; return a;}
template <typename Y> inline Y sqr(Y a) {return a * a;}

int read() {
  int w = 1, q = 0, ch = ' ';
  for (; ch < '0' || ch > '9'; ch = getchar()) if (ch == '-') w = -1;
  for (; ch >= '0' && ch <= '9'; ch = getchar()) q = q * 10 + ch - 48;
  return q * w;
}

inline void FileIO(){freopen(FIO".in", "r", stdin); freopen(FIO".out", "w", stdout);}

using namespace std;

const ll mod = 924844033;
const ll g0 = 5;
const int N = 524300;
int rnk[N];
inline ll qpow(ll t, ll b) {
  ll r = 1;
  while (b) {
    if (b & 1) r = r * t % mod;
    t = t * t % mod;
    b >>= 1;
  }
  return r;
}

typedef vector <ll> Poly;

ll w[2][N];
inline void NTTinit() {
  for (int i = 1; i < (1 << 19); i <<= 1) {
    ll wn = qpow(g0, (mod - 1) / (i << 1));
    for (int j = 0; j < i; j++) {
      w[1][i + j] = (j ? wn * w[1][i + j - 1] % mod : 1);
    }
    wn = qpow(g0, mod - 1 - (mod - 1) / (i << 1));
    for (int j = 0; j < i; j++) {
      w[0][i + j] = (j ? wn * w[0][i + j - 1] % mod : 1);
    }
  }
}
inline void NTT(ll *a, int fl, int n) {
  updmax(fl, 0);
  int L = 0;
  for (int _n = n; _n > 1; _n >>= 1, L++);
  for (int i = 0; i < n; i++) {
    rnk[i] = (rnk[i >> 1] >> 1) | ((i & 1) << (L - 1));
  }
  for (int i = 0; i < n; ++i) {
    if (i < rnk[i]) {
      swap(a[i], a[rnk[i]]);
    }
  }
  for (int i = 1; i < n; i <<= 1) {
    for (int j = 0; j < n; j += i << 1) {
      for (int k = 0; k < i; k++) {
        ll x = a[j + k], y = a[j + k + i] * w[fl][i + k] % mod;
        a[j + k] = (x + y) % mod;
        a[j + k + i] = (x - y + mod) % mod;
      }
    }
  }
  if (fl != 1) {
    ll inv = qpow(n, mod - 2);
    for (int i = 0; i < n; i++) {
      (a[i] *= inv) %= mod;
    }
  }
}

void Mul(const ll A[], int lenA, const ll B[], int lenB, ll C[], int lenC) {
  static ll E[N], F[N];
  int x = min(lenA, lenC) + min(lenB, lenC), n = 1;
  while (n < x) {
    n <<= 1;
  }
  memset(E, 0, n << 3);
  memset(F, 0, n << 3);
  memcpy(E, A, min(lenA, lenC) << 3);
  memcpy(F, B, min(lenB, lenC) << 3);
  if (x <= 100) {
    memset(C, 0, lenC << 3);
    for (int i = 0; i < lenA; i++) {
      for (int j = 0; j < lenB && j + i < lenC; j++) {
        C[i + j] = (C[i + j] + E[i] * F[j]) % mod;
      }
    }
    return;
  }
  NTT(E, 1, n);
  NTT(F, 1, n);
  for (int i = 0; i < n; i++) {
    E[i] = E[i] * F[i] % mod;
  }
  NTT(E, -1, n);
  for (int i = 0; i < lenC && i < n; i++) {
    C[i] = E[i];
  }
  for (int i = n; i < lenC; i++) {
    C[i] = 0;
  }
}
void fix(Poly &a, int n) {
  while (a.size() > n) {
    a.pop_back();
  }
  while (a.size() < n) {
    a.pb(0);
  }
}

Poly operator * (const Poly &a, const Poly &b) {
  Poly c(a.size() + b.size() - 1);
  Mul(a.data(), a.size(), b.data(), b.size(), c.data(), c.size());
  return c;
}

int n;
std::vector<int> G[N];
Poly f, g;
ll fac[N], inv[N];
int dfs(int x, int pr) {
  int sz = 1;
  for (auto y : G[x]) if (y != pr) {
    int s = dfs(y, x);
    f[n - s]--;
    f[s]--;
    sz += s;
  }
  return sz;
}

int main() {
  NTTinit();
  n = read();
  for (int i = 1; i < n; i++) {
    int x = read(), y = read();
    G[x].pb(y);
    G[y].pb(x);
  }
  f = g = Poly(n, 0);
  f[0] = n;
  dfs(1, -1);
  fac[0] = fac[1] = 1;
  inv[0] = inv[1] = 1;
  for (int i = 2; i <= n; i++) {
    fac[i] = fac[i - 1] * i % mod;
    inv[i] = mod - mod / i * inv[mod % i] % mod;
  }
  for (int i = 2; i <= n; i++) {
    inv[i] = inv[i] * inv[i - 1] % mod;
  }
  for (int i = 0; i < n; i++) {
    f[i] = (mod + f[i]) * fac[n - i] % mod;
    g[i] = inv[i];
  }
  fix(f = f * g, n);
  for (int i = 1; i <= n; i++) {
    printf("%lld\n", f[n - i] * inv[i] % mod);
  }
}


Measured memory_bytes: 55396