// Slower C++ solution:
#include <bits/stdc++.h>

typedef long long ll;



const int N = 2e5+50;

const int P = 924844033;



struct Graph {

	struct Edge {

		int to, nxt;

	} e[N<<1];

	int top, head[N];

	

	Graph(): top(0) {

		memset(head, -1, sizeof head);

	}

	

	void add(int u, int v) {

		e[top] = (Edge){v, head[u]};

		head[u] = top++;

	}

	

	void add2(int u, int v) {

		add(u, v);

		add(v, u);

	}

} G;



int n, a[N];

int siz[N];

int fac[N], ifac[N];

int g[N], h[N], s[N<<1];



int qPow(int x, int k) {

	int rtn = 1;

	for (; k; k >>= 1, x = (ll)x * x % P)

		if (k & 1) rtn = (ll)rtn * x % P;

	return rtn;

}



void dfs(int u, int fa) {

	siz[u] = 1;

	for (int i = G.head[u]; ~i; i = G.e[i].nxt) {

		int v = G.e[i].to;

		if (v == fa) continue;

		dfs(v, u);

		siz[u] += siz[v];

		a[siz[v]]--;

	}

	a[n]++;

	a[n-siz[u]]--;

}



void initFac() {

	fac[0] = 1;

	for (int i = 1; i <= n; i++)

		fac[i] = (ll)fac[i-1] * i % P;

	ifac[n] = qPow(fac[n], P-2);

	for (int i = n-1; i >= 0; i--)

		ifac[i] = (ll)ifac[i+1] * (i+1) % P;

}



namespace NTT {

	const int G = 5;

	

	int n;

	int rev[N<<2];

	int a[N<<2], b[N<<2], t[N<<2];

	

	void init(int m) {

		int len = 0;

		for (n = 1; n < m; n <<= 1)

			len++;

		for (int i = 0; i < n; i++)

			rev[i] = rev[i>>1] >> 1 | (i&1) << len-1;

	}

	

	void NTT(int f[], int sgn) {

		for (int i = 0; i < n; i++)

			if (rev[i] > i) std::swap(f[rev[i]], f[i]);

		for (int i = 1; i < n; i <<= 1) {

			int gn = qPow(G, (P-1)/(i*2));

			if (sgn == -1) gn = qPow(gn, P-2);

			for (int j = 0; j < n; j += i*2) {

				int g = 1;

				for (int k = 0; k < i; k++, g = (ll)g * gn % P) {

					int x = f[j+k], y = (ll)g * f[j+i+k] % P;

					f[j+k] = (x + y) % P;

					f[j+i+k] = (x - y) % P;

				}

			}

		}

		if (sgn == -1) {

			int invn = qPow(n, P-2);

			for (int i = 0; i < n; i++)

				f[i] = (ll)f[i] * invn % P;

		}

		for (int i = 0; i < n; i++)

			f[i] = (f[i] + P) % P;

	}

	

	void mul(int la, int ta[], int lb, int tb[], int res[]) {

		init(la+lb-1);

		memset(a, 0, sizeof a);

		memset(b, 0, sizeof b);

		for (int i = 0; i < la; i++)

			a[i] = ta[i];

		for (int i = 0; i < lb; i++)

			b[i] = tb[i];

		NTT(a, 1);

		NTT(b, 1);

		for (int i = 0; i < n; i++)

			t[i] = (ll)a[i] * b[i] % P;

		NTT(t, -1);

		for (int i = 0; i < la+lb-1; i++)

			res[i] = t[i];

	}

}



int main() {

	scanf("%d", &n);

	initFac();

	for (int i = 1, u, v; i < n; i++) {

		scanf("%d%d", &u, &v);

		G.add2(u, v);

	}

	dfs(1, 0);

	for (int i = 0; i < n; i++) {

		g[i] = ifac[i];

		h[i] = (ll)fac[n-i] * a[n-i] % P;

	}

	NTT::init(n);

	NTT::mul(n, g, n, h, s);

	for (int i = 1; i <= n; i++)

		printf("%d\n", (int)((ll)s[n-i] * ifac[i] % P));

	return 0;

}


// Faster C++ solution for the same problem (measured speedup: 8.46385159695113x):
    #include <bits/stdc++.h>

    #define N 200005

    #define ll long long

    #define For(i,x,y) for(int i=(x);i<=(y);++i)

    #define Rof(i,x,y) for(int i=(x);i>=(y);--i)

    #define Edge(x) for(int i=head[x];i;i=e[i].nxt)

    #define mset(x,y) memset(x,y,sizeof(x))

    #define strL strlen

    #define p_b push_back

    #define mcpy(x,y) memcpy(x,y,sizeof(x))

    #define lson l,mid,(o<<1)

    #define rson mid+1,r,((o<<1)|1)

    #define Ls (t[o].ls)

    #define Rs (t[o].rs)

    #define mod 924844033

    #define file(s) freopen(s".in","r",stdin),freopen(s".out","w",stdout)

    using namespace std;

    const int G=5;

    int num[N],sz[N],len,_len,cnt,head[N],n,bit,rev[N*5];

    ll fac[N],ans[N],_fac[N],g[N*5],_g[N*5],A[N*5],B[N*5];

    struct ed{ int v,nxt; }e[N<<1];

    void add(int u,int v){

    	e[++cnt]=(ed){v,head[u]},head[u]=cnt;

    	e[++cnt]=(ed){u,head[v]},head[v]=cnt;

    }

    ll qpow(ll x,int y){

    	ll tmp=1;

    	for(;y;y>>=1,(x*=x)%=mod) if(y&1) tmp=1ll*tmp*x%mod;

    	return tmp;

    }

    ll C(int x,int y){

    	if(x<y) return 0;

    	return 1ll*fac[x]*_fac[y]%mod*_fac[x-y]%mod;

    }

    ll mnS(ll x,ll y){ return x-y<0?x-y+mod:x-y; } 

    void init(){

    	fac[0]=_fac[0]=fac[1]=_fac[1]=1;

    	For(i,2,n){

    		fac[i]=1ll*fac[i-1]*i%mod;

    		_fac[i]=(1ll*mod-mod/i)*_fac[mod%i]%mod;

    	}

    	For(i,2,n) (_fac[i]*=_fac[i-1])%=mod;

    	for(bit=0,len=1;len<=2*n+1;len<<=1,bit++);

    	For(i,0,len-1) rev[i]=(rev[i>>1]>>1)|((i&1)<<bit-1);

    	g[len]=qpow(1ll*G,(mod-1)/len),_g[len]=qpow(g[len],mod-2);

    	for(int i=(len>>1);i>=2;i>>=1){

    		g[i]=g[i<<1]*g[i<<1]%mod;

    		_g[i]=_g[i<<1]*_g[i<<1]%mod;

    	}

    	_len=(int)qpow(len,mod-2);

    }

    void dfs(int x,int f){

    	sz[x]=1;

    	Edge(x){

    		int to=e[i].v;

    		if(to!=f){

    			dfs(to,x);

    			sz[x]+=sz[to];

    		}

    	}

    	if(x!=1){

    		num[sz[x]]++;

    		num[n-sz[x]]++;		

    	}

    }

    void NTT(ll *a,int f){

    	For(i,0,len-1) if(rev[i]>i) swap(a[rev[i]],a[i]);

    	for(int i=2;i<=len;i<<=1){

    		ll omega;f==1?omega=g[i]:omega=_g[i];

    		int mid=i>>1;

    		for(int j=0;j<len;j+=i){

    			ll w=1;

    			for(int k=j;k<j+mid;++k,(w*=omega)%=mod){

    				ll u=a[k],v=a[k+mid]*w%mod;

    				a[k]=(u+v)%mod;

    				a[k+mid]=(u-v+mod)%mod;

    			}

    		}

    	}

    	if(f==-1) For(i,0,len-1) (a[i]*=1ll*_len)%=mod; 

    }

    int main(){

    	int u,v;

    	scanf("%d",&n);

    	init();

    	For(i,1,n-1) scanf("%d%d",&u,&v),add(u,v);

    	dfs(1,0);

    	For(i,0,n) A[i]=fac[i]*num[i]%mod;

    	For(i,0,n) B[n-i]=_fac[i];

    	NTT(A,1),NTT(B,1);

    	For(i,0,len-1) A[i]=A[i]*B[i]%mod;

    	NTT(A,-1);

    	For(i,1,n)

    		ans[i]=mnS(1ll*n*C(n,i)%mod,_fac[i]*A[n+i]%mod);

    	For(i,1,n-1) printf("%lld\n",ans[i]);

    	printf("%lld",ans[n]);

    }