#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>

using namespace std;

const int MAXN = 200000 + 100;
const int MOD = 924844033;
const int PRIMITIVE_ROOT = 5;

int fpow(int x, int p)
{
	int ret = 1;
	for(; p; p >>= 1, x = (long long)x * x % MOD)
		if(p & 1)
			ret = (long long)ret * x % MOD;
	return ret;
}

bool check_primitive(int x, int p)
{
	int tmp = p - 1;
	for(int i = 1; i * i <= tmp; i++)
		if(tmp % i == 0)
		{
			if(i != tmp && fpow(x, i) == 1) return false;
			if(tmp / i != tmp && fpow(x, tmp / i) == 1) return false;
		}
	return true;
}

namespace myNTT
{
	int rev[4 * MAXN], w1[4 * MAXN], w2[4 * MAXN];

	void NTT_core(int n, int *a, int *w)
	{
		for(int i = 0; i < n; i++)
			if(i < rev[i])
				swap(a[i], a[rev[i]]);
		for(int i = 1; i < n; i <<= 1)
			for(int j = 0; j < n; j += 2 * i)
				for(int k = 0; k < i; k++)
				{
					int x = a[j + k], y = (long long)a[j + k + i] * w[i + k] % MOD;
					a[j + k] = (x + y) % MOD;
					a[j + k + i] = (x - y + MOD) % MOD;
				}
	}

	void NTT(int n, int *a)
	{
		NTT_core(n, a, w1);
	}

	void INTT(int n, int *a)
	{
		NTT_core(n, a, w2);
		int inv = fpow(n, MOD - 2);
		for(int i = 0; i < n; i++)
			a[i] = (long long)a[i] * inv % MOD;
	}

	void init(int n)
	{
		int l = log2(n) + 0.5;
		rev[0] = 0;
		for(int i = 1; i < n; i++)
			rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (l - 1));
		int wn = fpow(PRIMITIVE_ROOT, (MOD - 1) / n), half = n / 2;
		w1[half] = 1;
		for(int i = 1; i < half; i++)
			w1[half + i] = (long long)w1[half + i - 1] * wn % MOD;
		for(int i = half - 1; i >= 0; i--)
			w1[i] = w1[i << 1];
		wn = fpow(wn, MOD - 2);
		w2[half] = 1;
		for(int i = 1; i < half; i++)
			w2[half + i] = (long long)w2[half + i - 1] * wn % MOD;
		for(int i = half - 1; i >= 0; i--)
			w2[i] = w2[i << 1];
	}

	void conv_ntt(int n, int *a, int m, int *b, int *c)
	{
		static int A[4 * MAXN], B[4 * MAXN], C[4 * MAXN];
		int N = 1;
		while(N < n + m - 1) N <<= 1;
		init(N);
		for(int i = 0; i < N; i++) A[i] = B[i] = C[i] = 0;
		for(int i = 0; i < n; i++) A[i] = a[i];
		for(int i = 0; i < m; i++) B[i] = b[i];
		NTT(N, A), NTT(N, B);
		for(int i = 0; i < N; i++)
			C[i] = (long long)A[i] * B[i] % MOD;
		INTT(N, C);
		for(int i = 0; i < n + m - 1; i++)
			c[i] = C[i];
	}

	void conv_force(int n, int *a, int m, int *b, int *c)
	{
		static int C[4 * MAXN];
		for(int i = 0; i < n + m - 1; i++)
			C[i] = 0;
		for(int i = 0; i < n; i++)
			for(int j = 0; j < m; j++)
				C[i + j] = (C[i + j] + (long long)a[i] * b[j]) % MOD;
		for(int i = 0; i < n + m - 1; i++)
			c[i] = C[i];
	}

	void conv(int n, int *a, int m, int *b, int *c)
	{
		if(n <= 2333)
			conv_force(n, a, m, b, c);
		else
			conv_ntt(n, a, m, b, c);
	}
}

using myNTT::conv;

int n;
vector<int> edg[MAXN];
int p[MAXN];
int fac[MAXN], inv[MAXN];
int F[MAXN], G[MAXN], ans[2 * MAXN];

void init()
{
	fac[0] = 1;
	for(int i = 1; i < MAXN; i++)
		fac[i] = (long long)fac[i - 1] * i % MOD;
	inv[MAXN - 1] = fpow(fac[MAXN - 1], MOD - 2);
	for(int i = MAXN - 2; i >= 0; i--)
		inv[i] = (long long)inv[i + 1] * (i + 1) % MOD;
}

int dfs(int x, int fa) // return size
{
	int ret = 1;
	for(int i = 0; i < edg[x].size(); i++)
		if(edg[x][i] != fa)
		{
			int y = edg[x][i], size = dfs(y, x);
			p[n]++, p[size]--, p[n - size]--;
			ret += size;
		}
	return ret;
}


int main()
{
	ios::sync_with_stdio(false);
	// freopen("1.in", "r", stdin);
	// freopen("1.out", "w", stdout);

	init();

	cin >> n;
	for(int i = 1; i <= n - 1; i++)
	{
		int x, y;
		cin >> x >> y;
		edg[x].push_back(y), edg[y].push_back(x);
	}
	
	dfs(1, 0);
	p[n]++;
	for(int i = 0; i <= n; i++)
		p[i] = (p[i] + MOD) % MOD;

	for(int i = 0; i <= n; i++)
		F[i] = (long long)p[i] * fac[i] % MOD;
	for(int i = 0; i <= n; i++)
		G[i] = (long long)inv[n - i] % MOD;

	conv(n + 1, F, n + 1, G, ans);

	for(int i = 1; i <= n; i++)
		cout << (long long)inv[i] * ans[n + i] % MOD << endl;

	return 0;
}


Measured memory_bytes: 48000