#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

const ll p = 924844033;
const ll MAXN = (1<<19);
const ll T = 21;
const ll g = 5;

ll w, invw, M;
ll pw[MAXN], pinvw[MAXN];
ll fta[MAXN], ftb[MAXN], ftans[MAXN];
ll fta1[MAXN], ftb1[MAXN], ftans1[MAXN];
int ct = 0;

ll exp(ll x, ll k) {
    if (k == 0)
        return 1;
    ll y = exp(x, k/2);
    return (k%2 == 0) ? y*y%p : y*y%p*x%p;
}

ll inv(ll x) { return exp(x, p-2); }

vector<ll> pmult(vector<ll> a, vector<ll> b) {
    vector<ll> c;
    c.resize(max(a.size(), b.size()));
    for (int i = 0; i < c.size(); ++i)
        c[i] = 1;
    for (int i = 0; i < a.size(); ++i)
        c[i] = a[i];
    for (int i = 0; i < b.size(); ++i)
        c[i] = c[i]*b[i]%p;
    return c;
}

vector<ll> plusv(vector<ll> a, vector<ll> b) {
    vector<ll> c;
    c.resize(max(a.size(), b.size()));
    for (int i = 0; i < a.size(); ++i)
        c[i] = a[i];
    for (int i = 0; i < b.size(); ++i)
        c[i] = (c[i]+b[i])%p;
    return c;
}

void process(ll M) {
    //order of w is M
    w = exp(g, (p-1)/M);
    invw = inv(w);

    pw[0] = pinvw[0] = 1;
    for (int i = 1; i < M; ++i) {
        pw[i] = w*pw[i-1]%p;
        pinvw[i] = invw*pinvw[i-1]%p;
    }
}

vector<ll> fft(vector<ll> a, bool inverse) {
    M = 1; ct = 0;

    while (M < a.size())
        M *= 2, ct++;
    if (!inverse)
        M *= 2, ct++;

    assert(M <= MAXN);
    process(M);

    memset(fta, 0, sizeof(fta));

    for (int i = 0; i < a.size(); ++i)
        fta[i] = a[i];

    for (int i = ct-1; i >= 0; --i) {
        int l = (1<<i);
        for (int j = 0; j < (1<<i); ++j) {
            for (int k = 0; k < (1<<(ct-1-i)); ++k) {
                ll y = (inverse ? pinvw[k*l] : pw[k*l]);
                fta1[j+k*l] = (fta[j+2*k*l]+y*fta[j+l+2*k*l])%p;
                fta1[j+k*l+(1<<(ct-1))] = (fta[j+2*k*l]+p-y*fta[j+l+2*k*l]%p)%p;
            }
        }
        
        memcpy(fta, fta1, sizeof(fta));
    }
    
    vector<ll> ans;
    for (int i = 0; i < M; ++i)
        ans.push_back(fta[i]);
    if (inverse) {
        ll invm = inv(M);
        for (int i = 0; i < M; ++i)
            ans[i] = ans[i]*invm%p;
    }

    return ans;
}

vector<ll> mult(vector<ll> &a, vector<ll> &b) {
    vector<ll> c = pmult(fft(a, 0), fft(b, 0));
    return fft(c, 1);
}

ll fact[MAXN], invfact[MAXN];
ll n, k;
vector<ll> gr[MAXN];
vector<ll> ctt;
vector<ll> invf;

ll binom(ll x, ll y) {
    if (x < y || x < 0 || y < 0)
        return 0;
    return fact[x]*invfact[y]%p*invfact[x-y]%p;
}

void init() {
    fact[0] = invfact[0] = 1;
    for (int i = 1; i < MAXN; ++i) {
        fact[i] = i*fact[i-1]%p;
        invfact[i] = inv(fact[i]);
    }
}

int dfs(int v, int f = -1) {
    int x = 1;
    for (int u : gr[v])
        if (u != f)
            x += dfs(u, v);
    if (f != -1) {
        ctt[x]++;
        ctt[n-x]++;
    }

    return x;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    cin >> n;

    for (int i = 0; i < n-1; ++i) {
        int a, b;
        cin >> a >> b;
        a--; b--;
        gr[a].push_back(b);
        gr[b].push_back(a);
    }

    init();

    ctt.resize(n+1);
    dfs(0);
    for (int i = 0; i <= n; ++i)
        ctt[i] = ctt[i]*fact[i]%p;

    invf.resize(n+1);
    for (int i = 0; i <= n; ++i)
        invf[i] = invfact[i];
    reverse(invf.begin(), invf.end());

    vector<ll> e = mult(invf, ctt);

    for (int k = 1; k <= n; ++k) {
        cout << (n*binom(n, k) + p - invfact[k]*e[k+n]%p)%p << "\n";
    }
}

Measured memory_bytes: 75344