#include <set>
#include <map>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <vector>
#include <bitset>
#include <string>
#include <cstdio>
#include <cassert>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <algorithm>
#define mk make_pair
#define pb push_back
#define fi first
#define se second
#define REP(i, x, y) for(int i = (int)x; i <= (int)y; i ++)
#define FOR(i, x, y) for(int i = (int)x; i <  (int)y; i ++)
#define PER(i, x, y) for(int i = (int)x; i >= (int)y; i --)
#define trace(x) cerr << #x << " " << x << endl;
#define dprintf(...) fprintf(stderr, __VA__ARGS__)
#define dln()        fprintf(stderr, "\n")
using namespace std;
typedef long long LL;
typedef long double db;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef vector<PII> VPI;
const	int N = 1000005;
const	int P = 924844033;
const	int inf = 1e9;
const	LL Inf = 1e15;
const	int G = 5;

inline int IN(){
	char ch = getchar(); int x = 0, f = 0;
	while(ch < '0' || ch > '9') ch = getchar(), f = (ch == '-');
	while(ch >= '0' && ch <= '9'){
		x = (x << 1) + (x << 3) + ch - 48;
		ch = getchar();
	}
	return f ? (-x) : x;
}

inline int Pow(int x, int y, int p){
	int an = 1;
	for(; y; y >>= 1, x = (LL)x * x % p) if(y & 1) an = (LL)an * x % p;
	return an;
}

void renew(int &x, int y){
	x += y;
	if(x < 0) x += P;
	else if(x >= P) x -= P;
}

template<typename T> inline void chkmin(T &a, const T &b) {if(a > b) a = b;}
template<typename T> inline void chkmax(T &a, const T &b) {if(a < b) a = b;}

int n, a[N], tn = 0, tl = 0;
int w[2][600005], rev[600005];
void pret(int n){
	for(tn = 1, tl = -1; tn <= n; tn <<= 1, tl ++);
	int W = Pow(G, (P - 1) / tn, P), IW = Pow(W, P - 2, P);
	w[0][0] = w[1][0] = 1;
	FOR(i, 1, tn){
		w[0][i] = (LL)w[0][i - 1] * W % P;
		w[1][i] = (LL)w[1][i - 1] * IW % P;
	}
	FOR(i, 0, tn){
		rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << tl); 
	}
}

void fft(int *a, int f){
	FOR(i, 0, tn) if(i < rev[i]) swap(a[i], a[rev[i]]);
	for(int i = 1; i < tn; i <<= 1)
	for(int j = 0, t = tn / (i << 1); j < tn; j += i << 1)
	for(int k = 0, l = 0; k < i; k ++, l += t){
		int x = (LL)w[f][l] * a[j + k + i] % P;
		int y = a[j + k];
		a[j + k] = (y + x) % P;
		a[j + k + i] = (y + P - x) % P;
	}
	if(f){
		int invn = Pow(tn, P - 2, P);
		FOR(i, 0, tn) a[i] = (LL)a[i] * invn % P;
	}
}

VI E[N];
int b[N], ifac[N], fac[N];

int dfs(int x, int y = -1){
	int sz = 1;
	for(int v : E[x]) if(v ^ y) sz += dfs(v, x);
	a[sz] ++;
	a[n - sz] ++;
	return sz;
}

int C(int n, int k){
	return (LL)fac[n] * ifac[k] % P * ifac[n - k] % P;
}

int main(){
	scanf("%d", &n);
	REP(i, 1, n - 1){
		int x, y;
		scanf("%d%d", &x, &y);
		E[x].pb(y);
		E[y].pb(x);
	}
	dfs(1);
	fac[0] = ifac[0] = 1;
	REP(i, 1, n){
		fac[i] = (LL)fac[i - 1] * i % P;
		ifac[i] = Pow(fac[i], P - 2, P);
	}
	REP(i, 0, n) a[i] = (LL)a[i] * fac[i] % P;
	REP(i, 0, n) b[i] = ifac[i];
//	printf("a : ");REP(i, 0, n) printf("%d ", a[i]); puts("");
	reverse(b, b + n + 1);
//	printf("b : ");REP(i, 0, n) printf("%d ", b[i]); puts("");
	pret(n * 2);
	fft(b, 0); fft(a, 0);
	FOR(i, 0, tn) a[i] = (LL)a[i] * b[i] % P;
	fft(a, 1);
//	REP(i, n, n << 1) cerr << i << " " << a[i] << endl;
	REP(i, n, n << 1) a[i - n] = ((LL)(n + 1) * C(n, i - n) - (LL)a[i] * ifac[i - n]) % P;
	REP(i, 1, n) printf("%d\n", (a[i] + P) % P);
	return 0;
}





















Measured memory_bytes: 60160