#include <cstring>
#include <algorithm>
#include <cstdio>

typedef long long ll;
const int N = 200010;
const int MOD = 924844033;
const int G = 5;
int _w;

int fpow( int a, int b ) {
	int c = 1;
	while(b) {
		if( b & 1 ) c = int(1LL * c * a % MOD);
		a = int(1LL * a * a % MOD);
		b >>= 1;
	}
	return c;
}
int inv( int x ) {
	return fpow(x, MOD-2);
}
int add_mod( int &a, int b ) {
	a += b;
	return a -= a >= MOD ? MOD : 0;
}

int n, ans[N];

namespace Tree {
	int head[N], nxt[N*2], to[N*2], eid;
	void init() {
		eid = 0;
		memset(head, -1, sizeof head);
	}
	void link( int u, int v ) {
		to[eid] = v, nxt[eid] = head[u], head[u] = eid++;
		to[eid] = u, nxt[eid] = head[v], head[v] = eid++;
	}
}

int fac[N], ifac[N];
void prelude() {
	fac[0] = 1;
	for( int i = 1; i <= n; ++i )
		fac[i] = int(1LL * fac[i-1] * i % MOD);
	ifac[n] = inv( fac[n] );
	for( int i = n; i >= 1; --i )
		ifac[i-1] = int(1LL * ifac[i] * i % MOD);
}
int C( int n, int m ) {
	return int(1LL * fac[n] * ifac[m] % MOD * ifac[n-m] % MOD);
}

void solve1() {
	for( int i = 1; i <= n; ++i )
		add_mod( ans[i], int(1LL * C(n-1, i-1) * n % MOD) );
	for( int i = 1; i <= n-1; ++i )
		add_mod( ans[i], int(1LL * C(n-1, i) * n % MOD) );
}

int f[N], g[N], fg[N*2];

int sz[N];
void dfs( int u, int fa ) {
	using namespace Tree;
	sz[u] = 1;
	for( int i = head[u]; ~i; i = nxt[i] ) {
		int v = to[i];
		if( v == fa ) continue;
		dfs(v, u);
		sz[u] += sz[v];
		++f[sz[v]];
	}
	if( fa ) ++f[n-sz[u]];
}

namespace NTT {
	const int N = 19;
	int a1[1<<N], a2[1<<N], a3[1<<N];
	int y1[1<<N], y2[1<<N], y3[1<<N];
	
	int rb( int x, int n ) {
		int y = 0;
		for( int i = 1; i < n; i <<= 1, x >>= 1 )
			y = (y << 1) | (x & 1);
		return y;
	}
	void dft( int *a, int n, int *y, int idft ) {
		for( int i = 0; i < n; ++i )
			y[i] = a[rb(i, n)];
		for( int m = 2; m <= n; m <<= 1 ) {
			int wm = fpow(G, (MOD-1)/m);
			if( idft ) wm = inv(wm);
			for( int i = 0; i < n; i += m ) {
				int w = 1;
				for( int j = 0; j < m/2; ++j ) {
					int p = i+j, q = i+j+m/2;
					int u = y[p], v = int(1LL * y[q] * w % MOD);
					y[p] = (u + v) % MOD;
					y[q] = (u - v + MOD) % MOD;
					w = int(1LL * w * wm % MOD);
				}
			}
		}
		if( idft ) {
			int invn = inv(n);
			for( int i = 0; i < n; ++i )
				y[i] = int(1LL * y[i] * invn % MOD);
		}
	}
	void solve( int *a, int *b, int m, int *c ) {
		int n = 1;
		while( n < m+m ) n <<= 1;
		for( int i = 0; i < m; ++i ) {
			a1[i] = a[i];
			a2[i] = b[i];
		}
		dft(a1, n, y1, 0);
		dft(a2, n, y2, 0);
		for( int i = 0; i < n; ++i )
			y3[i] = int(1LL * y1[i] * y2[i] % MOD);
		dft(y3, n, a3, 1);
		for( int i = 0; i < m+m-1; ++i )
			c[i] = a3[i];
	}
}

void solve2() {
	dfs(1, 0);
	for( int i = 0; i < n; ++i ) {
		f[i] = int(1LL * f[i] * fac[i] % MOD);
		g[i] = ifac[n-i-1];
	}
	NTT::solve(f, g, n, fg);
	for( int i = 1; i < n; ++i ) {
		int now = fg[n-1+i];
		now = int(1LL * now * ifac[i] % MOD);
		ans[i] = (ans[i] - now + MOD) % MOD;
	}
}

int main() {
	_w = scanf( "%d", &n );
	Tree::init();
	for( int i = 0; i < n-1; ++i ) {
		int u, v;
		_w = scanf( "%d%d", &u, &v );
		Tree::link(u, v);
	}
	prelude(), solve1(), solve2();
	for( int i = 1; i <= n; ++i )
		printf( "%d\n", ans[i] );
	return 0;
}


Measured memory_bytes: 32512