/*
    Author: zxy_hhhh
    date: 2020/03/15
*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<set>
#include<vector>
#include<map>
#include<queue>
#include<iostream>
#define ll long long
inline ll rd() {
    ll _x=0;int _ch=getchar(),_f=1;
    for(;!isdigit(_ch)&&(_ch!='-')&&(_ch!=EOF);_ch=getchar());
    if (_ch=='-'){_f=0;_ch=getchar();}
    for(;isdigit(_ch);_ch=getchar()) _x=_x*10+_ch-'0';
    return _f?_x:-_x;
}
void write(ll _x){if (_x>=10) write(_x/10),putchar(_x%10+'0'); else putchar(_x+'0'); }
inline void wrt(ll _x,char _p){if (_x<0) putchar('-'),_x=-_x; write(_x); if (_p) putchar(_p);}
namespace Polynomial {
#define maxn 900005
#define MAXLEN 524288
#define mod 924844033
#define g 5
inline int qpow(int x, int k=mod-2) {
    int ans = 1;
    for (; k; k >>= 1, x = 1ll * x * x % mod)
        if (k & 1) ans = 1ll * ans * x % mod;
    return ans;
}
inline int Mod(int x) {
	return x>=mod?x-mod:x;
}
long unsigned int lim;
int w[maxn];
bool FIRSTINIT;
inline void Init(long unsigned int len){
    lim=1;
    while (lim <= len) lim <<= 1;
    if (FIRSTINIT) return ;
    FIRSTINIT=1;
    for(long unsigned int i=1; i < MAXLEN; i<<=1){
        w[i]=1;
        int t=qpow(g, (mod-1)/i/2);
        for(long unsigned int j=1; j<i; ++j) w[i+j]=1ll*w[i+j-1]*t%mod;
    }
}
#define initT(x) t##x=(*(F1+x))*(*(W+x))%mod
#define doitT(x) (*(F1+x))=(*(F0+x)+mod-t##x),(*(F0+x))+=t##x
#define tido 4
inline void DFT(std::vector<int> &f, long unsigned long n=lim) {
    static unsigned long long F[maxn];
    f.resize(n);
    for(unsigned long int i=0, j=0; i<n; ++i){
        F[i]=f[j];
        for(unsigned long int k=n>>1; (j^=k)<k; k>>=1);
    }
    for(unsigned long int i=1; i<n; i<<=1) {
        for(unsigned long int j=0; j<n; j+=i<<1){
            int *W=w+i;
            unsigned long long *F0=F+j, *F1=F+j+i,k=j;
            unsigned long long t0,t1,t2,t3;
            for(;k+tido<j+i;k+=tido,W+=tido,F0+=tido,F1+=tido) {
                initT(0); initT(1);
                initT(2); initT(3);
                doitT(0); doitT(1);
                doitT(2); doitT(3);
            }
            for(; k<j+i; ++k, ++W, ++F0, ++F1){
                unsigned long long t=(*F1)*(*W)%mod;
                (*F1)=*F0+mod-t, (*F0)+=t;
            }
        }
    }
    for(unsigned long int i=0; i<n; ++i) f[i]=F[i]%mod;
}
#undef initT
#undef doitT
#undef todi
inline void IDFT(std::vector<int> &f, int n=lim){
   // f.resize(n);
    reverse(f.begin()+1, f.end());
    DFT(f, n);
    int I=qpow(n);
    for(int i=0; i<n; ++i) f[i]=1ll*f[i]*I%mod;
}
struct Poly {
    std::vector<int> F;
    void cp(std::vector<int>&H,long unsigned int n) const {
        H.clear();
        if (n>F.size()) {
            for (long unsigned int i=0;i<F.size();i++)
                H.push_back(F[i]);
            // H.resize(n);
        }
        else {
            for(long unsigned int i=0;i<n;i++) H.push_back(F[i]);
        }
    }
    void operator = (const Poly &B) {F=B.F;}
    Poly operator * (const Poly &B) const{
        Poly res,temp;
        int N=F.size()+B.F.size()-1;
        Init(N);
        res.F=F,temp.F=B.F;
        DFT(res.F),DFT(temp.F);
		for(long unsigned int i=0;i<lim;i++) 
            res.F[i]=1ll*res.F[i]*temp.F[i]%mod;
        IDFT(res.F);
        res.F.resize(N);
        return res; 
    }
    void operator *= (const Poly &B) {
        *this=*this*B;
    }
    Poly operator * (const int x) const{
        Poly res;
        int X=Mod(x+mod);
        for(long unsigned int i=0;i<F.size();i++) 
            res.F.push_back(1ll*F[i]*X%mod);
        return res;
    }
    void operator *= (const int x) {
        int X=Mod(x+mod);
        for(long unsigned int i=0;i<F.size();i++)
            F[i]=1ll*F[i]*X%mod;
    }
    Poly __Inv(int n) const {
        if (n==1) {
            Poly res;
            res.F.push_back(qpow(F[0]));
            return res;
        }
        Poly res=__Inv((n+1)>>1);
        Poly H;
        cp(H.F,n);
        Init(n<<1);
        DFT(res.F),DFT(H.F);
        for(long unsigned int i=0;i<lim;i++)
            res.F[i]=1ll*Mod(2-1ll*res.F[i]*H.F[i]%mod+mod)*res.F[i]%mod;
        IDFT(res.F);
        res.F.resize(n);
        return res;
    }
    Poly Inv(int n=-1) const {
        if (n==-1) n=F.size();
        return __Inv(n);
    }      //多项式求逆
    inline void OUT(int len=-1) {
        if (len==-1) len=F.size();
        for(int i=0;i<len;i++) 
            printf("%d ",F[i]);
        putchar('\n');
    }
    inline void push(int x) {F.push_back(x);}
};//事实上这只是一只重载了运算符的std::vector
//请在有氧环境下使用
#undef maxn
}
using Polynomial::Poly;
using Polynomial::qpow;
#define maxn 200005
int n;
int cnt[maxn],fac[maxn],inv[maxn];
std::vector<int> G[maxn];
int sz[maxn];
void dfs(int u,int fa) {
    sz[u]=1;
    for(auto i:G[u]) if (i!=fa) {
        dfs(i,u);
        sz[u]+=sz[i];
        cnt[sz[i]]++;
    }
    if (fa) cnt[n-sz[u]]++;
}
int main() {
    n=rd();
    for(int i=2;i<=n;i++) {
        int x=rd(),y=rd();
        G[x].push_back(y),G[y].push_back(x);
    }
    dfs(1,0);
    fac[0]=fac[1]=inv[0]=inv[1]=1;
    for(int i=2;i<=n;i++) {
        fac[i]=1ll*fac[i-1]*i%mod;
        inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
    }
    for(int i=2;i<=n;i++) {
        inv[i]=1ll*inv[i]*inv[i-1]%mod;
    }
    Poly A,B;
    for(int i=0;i<=n;i++) {
        A.push(1ll*fac[i]*cnt[i]%mod);
        B.push(inv[n-i]);
    }
    A*=B;
    for(int i=n+1;i<=n+n;i++) {
        A.F[i]=1ll*A.F[i]*inv[i-n]%mod;
    }
    for(int i=1;i<=n;i++) {
        int ans=1ll*n*fac[n]%mod*inv[i]%mod*inv[n-i]%mod;
        wrt((ans-A.F[i+n]+mod)%mod,'\n');
    }
}

Measured memory_bytes: 40156