#include <stdio.h>
#include <algorithm>
#include <vector>
using namespace std;

const int maxL = 18;
const int maxN = 1 << maxL;
const long long mod = 924844033;
long long generator = 5;
long long root[maxN], invroot[maxN];
long long inv[maxN], fact[maxN], ifact[maxN];
int rev[maxL+1][maxN];

inline long long add(long long a, long long b)
{
	a += b;
	if (a >= mod)
		a -= mod;
	return a;
}

inline long long mul(long long a, long long b)
{
	return a * b % mod;
}

long long fpow(long long a, long long p)
{
	a %= mod;
	p = (p % (mod - 1) + mod - 1) % (mod - 1);
	long long r = 1;
	while (p){
		if (p & 1) r = r * a % mod;
		a = a * a % mod;
		p >>= 1;
	}
	return r;
}

int get_rev(int a, int u)
{
	int r = 0;
	u--;
	while (u){
		r <<= 1;
		r += a & 1;
		a >>= 1;
		u >>= 1;
	}
	return r;
}

void init()
{
	root[0] = invroot[0] = 1;
	root[1] = fpow(generator, (mod - 1) / maxN);
	invroot[1] = fpow(root[1], -1);
	for (int j = 2; j<maxN; j++){
		root[j] = mul(root[j - 1], root[1]);
		invroot[j] = mul(invroot[j - 1], invroot[1]);
	}
	for (int l=0;l<=maxL;l++){
		for (int i=0;i<(1<<l);i++) rev[l][i] = get_rev(i,(1<<l));
	}

	inv[1] = fact[0] = fact[1] = ifact[0] = ifact[1] = 1;
	for (int i=2;i<maxN;i++){
		inv[i] = (mod - mod / i) * inv[mod % i] % mod;
		fact[i] = fact[i-1] * i % mod;
		ifact[i] = ifact[i-1] * inv[i] % mod;
	}
}

long long comb(int n, int k)
{
	if (n < 0 || k < 0 || k > n) return 0;
	return fact[n] * ifact[k] % mod * ifact[n-k] % mod;
}
vector<long long> fft(long long *root, int *rev, vector<long long> input)
{
	int n = input.size();
	vector<long long> res(n);
	for (int i = 0; i < n; i++) res[rev[i]] = input[i];
	for (int i = 2, h = 1, u = maxN >> 1; i <= n; i <<= 1, h <<= 1, u >>= 1){
		for (int k = 0; k < n; k += i){
			for (int j = 0; j < h; j++){
				long long w = root[u*j];
				long long t = mul(w, res[k + j + h]);
				long long u = res[k + j];
				res[k + j] = add(u, t);
				res[k + j + h] = add(u, mod - t);
			}
		}
	}
	return res;
}

void poly_norm(vector<long long> &a)
{
	while (!a.empty() && a.back() == 0) a.pop_back();
}

vector<long long> poly_mul(vector<long long> a, vector<long long> b)
{
	vector<long long> c;
	int al = a.size(), bl = b.size(), n = 1, l = 0;
	while (n < al + bl - 1) n *= 2, l++;
	if (n <= 32){
		c = vector<long long>(n,0);
		for (int i=0;i<al;i++) for (int j=0;j<bl;j++) c[i+j] = (c[i+j] + a[i] * b[j]) % mod;
	}
	else{
		a.resize(n); b.resize(n);
		vector<long long> A = fft(root,rev[l],a);
		vector<long long> B = fft(root,rev[l],b);
		for (int i=0;i<n;i++) A[i] = mul(A[i],B[i]);
		c = fft(invroot,rev[l],A);
		long long invn = fpow(n,-1);
		for (int i=0;i<n;i++) c[i] = mul(c[i],invn);
	}
	c.resize(al+bl-1);
	return c;
}

vector<int> v[200020];
vector<int> sz;

int dfs(int x, int l)
{
	int s = 1;
	for (int y : v[x]) if (y != l) s += dfs(y,x);
	if (l) sz.push_back(s);
	return s;
}

vector<long long> go(vector<int> sz, int div)
{
	if (sz.empty()) return vector<long long>();
	if (div == -1) return vector<long long>(1,sz.size());

	vector<int> a,b;
	for (int x : sz){
		if (x < (1 << div)) a.push_back(x);
		else b.push_back(x-(1<<div));
	}

	vector<long long> p = go(a,div-1); poly_norm(p);
	vector<long long> q = go(b,div-1); poly_norm(q);
	if (!q.empty()){
		vector<long long> r((1<<div)+1,0);
		for (int k=0;k<=(1<<div);k++){
			r[k] = comb((1<<div),k);
		}
		q = poly_mul(q,r);
	}

	p.resize(max(p.size(),q.size()));
	for (int i=0;i<q.size();i++){
		p[i] = add(p[i],q[i]);
	}

	return p;
}

int main()
{
	init();

	int n; scanf ("%d",&n);
	for (int i=1;i<n;i++){
		int a,b; scanf ("%d %d",&a,&b);
		v[a].push_back(b);
		v[b].push_back(a);
	}
	dfs(1,0);
	for (int i=0;i<n-1;i++) sz.push_back(n-sz[i]);

	vector<long long> v(n+1,0);
	for (int i=0;i<=n;i++) v[i] = comb(n,i) * n % mod;
	vector<long long> u = go(sz,17);
	u.resize(n+1);

	for (int i=1;i<=n;i++) printf ("%lld\n",(v[i]+mod-u[i])%mod);

	return 0;
}


Measured memory_bytes: 59064