#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const ll MOD = 924844033;
using Graph = vector<vector<int>>;
vector<ll> fact;
vector<ll> factInv;
ll powm(ll x, ll k) {
  ll res = 1;
  while (k) {
    if (k & 1) res = res * x % MOD;
    k >>= 1;
    x = x * x % MOD;
  }
  return res;
}
ll modInv(ll x) { return powm(x, MOD - 2); }
inline ll comb(int x, int k) {
  return fact[x] * factInv[k] % MOD * factInv[x - k] % MOD;
}
void init(int n) {
  fact.resize(n + 1), factInv.resize(n + 1);
  fact[0] = 1;
  for (int i = 0; i < n; i++) {
    fact[i + 1] = fact[i] * (i + 1) % MOD;
  }
  factInv[n] = modInv(fact[n]);
  for (int i = n - 1; i >= 0; i--) {
    factInv[i] = factInv[i + 1] * (i + 1) % MOD;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  if (n > 10000) return 1;
  init(n);
  Graph g(n);
  for (int i = 0; i + 1 < n; i++) {
    int a, b;
    cin >> a >> b;
    a--, b--;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  vector<int> sz(n);
  function<int(int, int)> dfs = [&](int v, int pre) {
    sz[v] = 1;
    for (auto to : g[v]) {
      if (to == pre) continue;
      sz[v] += dfs(to, v);
    }
    return sz[v];
  };
  dfs(0, -1);
  vector<int> szcnt(n + 1);
  for (int i = 0; i < n; i++) {
    for (auto to : g[i]) {
      if (sz[i] < sz[to]) continue;
      szcnt[sz[to]]++;
      szcnt[n - sz[to]]++;
    }
  }
  vector<ll> res(n + 1);
  for (int k = 1; k < n; k++)
    res[k] = n * comb(n - 1, k - 1) + n * comb(n - 1, k);
  res[n] = n * comb(n - 1, n - 1);
  for (int k = 1; k <= n; k++) {
    ll sc = 0;
    for (int i = k; i <= n - k; i++) sc += szcnt[i] * comb(i, k);
    res[k] -= sc;
    res[k] = (res[k] % MOD + MOD) % MOD;
  }
  for (int i = 1; i <= n; i++) {
    cout << res[i] << "\n";
  }
  return 0;
}
