// 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.425758148263352x):
#include <bits/stdc++.h>

using namespace std;

const int N=8e5+50,P=924844033;



int head[N],etop;

struct Edge

{

	int v,nxt;

}e[N<<1];

void add(int u,int v)

{

	e[++etop].v=v;

	e[etop].nxt=head[u];

	head[u]=etop;

}



int power(int x,int k)

{

	int ret=1;

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

		if (k&1) ret=1LL*ret*x%P;

	return ret;

}

namespace NTT

{

	const int G=5;

	

	int n,r[N],a[N],b[N];

	void init(int m)

	{

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

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

			r[i]=(r[i>>1]>>1) | (i&1 ? n>>1 : 0);

	}

	void NTT(int *f,int sgn)

	{

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

			if (r[i]>i) swap(f[r[i]],f[i]);

		for (int len,siz=2;siz<=n;siz<<=1)

		{

			len=siz>>1;

			int w=power(G,(P-1)/siz);

			if (sgn==-1) w=power(w,P-2);

			for (int l=0;l<n;l+=siz)

	        {

	            int buf=1;

	            for (int i=l;i<l+len;i++)

	            {

	                int t=1LL*buf*f[i+len]%P;

	                f[i+len]=(f[i]-t)%P;

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

	                buf=1LL*buf*w%P;

	            }

	        }

		}

		if (sgn==-1)

	    {

	        int inv=power(n,P-2);

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

	            f[i]=1LL*f[i]*inv%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);

		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++)

			a[i]=1LL*a[i]*b[i]%P;

		NTT(a,-1);

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

			res[i]=a[i];

	}

}



int n,fac[N],ifac[N],siz[N],a[N];

int g[N],h[N],ans[N];

void dfs(int u,int fa)

{

	siz[u]=1;

	for (int v,i=head[u];i;i=e[i].nxt)

	{

		v=e[i].v;

		if (v==fa) continue;

		dfs(v,u);

		siz[u]+=siz[v];

		--a[siz[v]];

	}

	a[n]++;

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

}

void init()

{

	fac[0]=1;

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

		fac[i]=1LL*fac[i-1]*i%P;

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

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

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

}

int main()

{

	scanf("%d",&n);

	init();

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

	{

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

		add(u,v); add(v,u);

	}

	dfs(1,0);

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

	{

		g[i]=ifac[i];

		h[i]=1LL*fac[n-i]*a[n-i]%P;

	}

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

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

		printf("%d\n",1LL*ans[n-i]*ifac[i]%P);

	return 0;

}