#ifdef DEBUG
#define _GLIBCXX_DEBUG
#endif

#include <bits/stdc++.h>

using namespace std;

typedef long double ld;

#ifdef DEBUG
#define eprintf(...) fprintf(stderr, __VA_ARGS__), fflush(stderr)
#else
#define eprintf(...) ;
#endif

#define sz(x) ((int) (x).size())
#define TASK "text"

const int inf = (int) 1.01e9;
const long long infll = (long long) 1.01e18;
const ld eps = 1e-9;
const ld pi = acos((ld) -1);

#ifdef DEBUG
mt19937 mrand(300); 
#else
mt19937 mrand(chrono::steady_clock::now().time_since_epoch().count()); 
#endif

int rnd(int x) {
  return mrand() % x;
}

const int mod = 924844033;

int mul(int a, int b) {
  return (long long) a * b % mod;
}

void add(int &a, int b) {
  a += b;
  if (a >= mod) {
    a -= mod;
  }
}

int powMod(int x, int p) {
  int res = 1;
  while (p) {
    if (p & 1) {
      res = mul(res, x);
    }
    p >>= 1;
    x = mul(x, x);
  }
  return res;
}

const int w1 = 2187;
const int maxn = (int) 6e5 + 5;
int f[maxn], inv[maxn], finv[maxn];

void precalc() {
  /*for (int x = 2;; x++) {
    int y = x;
    bool ok = true;
    for (int i = 0; i < 20; i++) {
      if (y == 1) {
        ok = false;
        break;
      }
      y = mul(y, y);
    }
    if (ok && y == 1) {
      eprintf("%d\n", x);
      exit(0);
    }
  }*/
  f[0] = 1;
  for (int i = 1; i < maxn; i++) {
    f[i] = mul(f[i - 1], i);
  }
  inv[1] = 1;
  for (int i = 2; i < maxn; i++) {
    inv[i] = (mod - (long long) (mod / i) * inv[mod % i] % mod) % mod;
  }
  finv[0] = 1;
  for (int i = 1; i < maxn; i++) {
    finv[i] = mul(finv[i - 1], inv[i]);
  }
}

namespace FFT {
  const int maxk = 20, maxn = (1 << maxk) + 5;
  int brev[maxn];
  int ws[maxn];
  int n, k;
  int lastk = -1;

  void fft(int *f) {
    if (k != lastk) {
      lastk = k;
      {
        brev[0] = 0;
        for (int i = 1, bit = -1; i < n; i++) {
          if (!(i & (i - 1))) {
            bit++;
          }
          brev[i] = (brev[i ^ (1 << bit)] ^ (1 << (k - 1 - bit)));
        }
      }
      {
        ws[1] = 1;
        for (int l = 0; l < k - 1; l++) {
          int w = powMod(w1, (1 << (20 - l - 2)));
          for (int i = (1 << l); i < (1 << (l + 1)); i++) {
            ws[2 * i] = ws[i];
            ws[2 * i + 1] = mul(ws[i], w);
          }
        }
      }
    }
    for (int i = 0; i < n; i++) {
      if (i < brev[i]) {
        swap(f[i], f[brev[i]]);
      }
    }
    for (int len = 1; len < n; len <<= 1) {
      for (int i = 0; i < n; i += len) {
        int j = i + len;
        for (int it = 0; it < len; it++, i++, j++) {
          int tmp = mul(f[j], ws[len + it]);
          f[j] = f[i];
          add(f[i], tmp);
          add(f[j], mod - tmp);
        }
      }
    }
  }

  int a[maxn], b[maxn];

  void mulPol(int na, int *_a, int nb, int *_b, int *res) {
    for (int i = 0; i < na; i++) {
      a[i] = _a[i];
    }
    for (int i = 0; i < nb; i++) {
      b[i] = _b[i];
    }
    int nres = na + nb - 1;
    n = 1;
    k = 0;
    while (n < nres) {
      n <<= 1;
      k++;
    }
    assert(n < maxn);
    for (int i = na; i < n; i++) {
      a[i] = 0;
    }
    for (int i = nb; i < n; i++) {
      b[i] = 0;
    }
    fft(a);
    fft(b);
    for (int i = 0; i < n; i++) {
      a[i] = mul(a[i], b[i]);
    }
    reverse(a + 1, a + n);
    fft(a);
    for (int i = 0; i < nres; i++) {
      res[i] = mul(a[i], inv[n]);
    }
  }
}

int n;
vector<int> g[maxn];

bool read() {
  if (scanf("%d", &n) < 1) {
    return false;
  }
  for (int i = 0; i < n; i++) {
    g[i].clear();
  }
  for (int i = 0; i < n - 1; i++) {
    int v, u;
    scanf("%d%d", &v, &u);
    v--;
    u--;
    g[v].push_back(u);
    g[u].push_back(v);
  }
  return true;
}

int ts[maxn];
int a[maxn], b[maxn], c[maxn];

void dfs(int v, int p) {
  ts[v] = 1;
  add(a[n], 1);
  for (int i = 0; i < sz(g[v]); i++) {
    int u = g[v][i];
    if (u == p) {
      continue;
    }
    dfs(u, v);
    add(a[ts[u]], mod - 1);
    ts[v] += ts[u];
  }
  if (p != -1) {
    add(a[n - ts[v]], mod - 1);
  }
}

void solve() {
  for (int i = 0; i <= n; i++) {
    a[i] = 0;
  }
  dfs(0, -1);
  for (int i = 0; i <= n; i++) {
    a[i] = mul(a[i], f[i]);
  }
  reverse(a, a + n + 1);
  for (int i = 0; i <= n; i++) {
    b[i] = finv[i];
  }
  FFT::mulPol(n + 1, a, n + 1, b, c);
  for (int i = 1; i <= n; i++) {
    printf("%d\n", mul(c[n - i], finv[i]));
  }
}

int main() {
  precalc();
#ifdef DEBUG
  assert(freopen(TASK ".in", "r", stdin));
  assert(freopen(TASK ".out", "w", stdout));
#endif
  while (read()) {
    solve();
#ifdef DEBUG
    eprintf("Time %.2f\n", (double) clock() / CLOCKS_PER_SEC);
#endif
  }
  return 0;
}


Measured memory_bytes: 68096