#include<stdio.h>
#include<stdlib.h>
#include<cstring>
#include<iostream>
#include<ctype.h>
#include<algorithm>
#include<vector>
#include<string>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<cmath>
#include<bitset>
#include<iomanip>
#include<complex>
#include<utility>

#define X first
#define Y second
#define REP_0(i,n) for(int i=0;i<(n);++i)
#define REP_1(i,n) for(int i=1;i<=(n);++i)
#define REP_2(i,a,b) for(int i=(a);i<(b);++i)
#define REP_3(i,a,b) for(int i=(a);i<=(b);++i)
#define REP_4(i,a,b,c) for(int i=(a);i<(b);i+=(c))
#define DOW_0(i,n) for(int i=(n)-1;-1<i;--i)
#define DOW_1(i,n) for(int i=(n);0<i;--i)
#define DOW_2(i,a,b) for(int i=(b);(a)<i;--i)
#define DOW_3(i,a,b) for(int i=(b);(a)<=i;--i)
#define FOREACH(a,b) for(typeof((b).begin()) a=(b).begin();a!=(b).end();++a)
#define RFOREACH(a,b) for(typeof((b).rbegin()) a=(b).rbegin();a!=(b).rend();++a)
#define PB push_back
#define PF push_front
#define MP make_pair
#define IS insert
#define ES erase
#define IT iterator
#define RI reserve_iterator
#define PQ priority_queue
#define LB lower_bound
#define UB upper_bound
#define ALL(x) x.begin(),x.end()

#define PI 3.1415926535897932384626433832795
#define EXP 2.7182818284590452353602874713527

using namespace std;

typedef long long LL;
typedef long double LD;
typedef double DB;
typedef pair<int,int> PII;
typedef vector<int> VI;
typedef pair<int,PII> PIII;
typedef pair<LD,int> PLDI;
typedef vector<PII> VII;

template<class T>
T Mul(T x,T y,T P){
	T F1=0;
	while(y)
	{
		if(y&1)
		{
			F1+=x;
			if(F1<0||F1>=P)F1-=P;
		}
		x<<=1;
		if(x<0||x>=P)x-=P;
		y>>=1;
	}
	return F1;
}

template<class T>
T Pow(T x,T y,T P){
	T F1=1;x%=P;
	while(y)
	{
		if(y&1)
		{
			F1=Mul(F1,x,P);
		}
		x=Mul(x,x,P);
		y>>=1;
	}
	return F1;
}

template<class T>
T Gcd(T x,T y){
	if(y==0)return x;
	T z;
	while(z=x%y){
		x=y,y=z;
	}
	return y;
}

template<class T>
void UpdateMin(T &x,T y){
	if(y<x)
	{
		x=y;
	}
}

template<class T>
void UpdateMax(T &x,T y){
	if(x<y)
	{
		x=y;
	}
}

template<class T>
T Sqr(const T x){
	return x*x;
}

template<class T>
T Abs(const T x){
	return x<0?-x:x;
}

#define MaxBuffer 20000000
class ReadBuffer{
	private:
	char buff[MaxBuffer];
	char *buf;
	public:
	void init(int size=MaxBuffer)
	{
		fread(buff,1,size,stdin);
		buf=buff;
	}
	template<class T>
	bool readInteger(T &x)
	{
		x=0;
		while(*buf&&isspace(*buf)) ++buf;
		if(*buf==0) return false;
		static bool flag;
		flag=0;
		if(*buf=='-') flag=true;
		else x=*buf-'0';
		while(isdigit(*++buf)) x=x*10+*buf-'0';
		if(flag) x=-x;
		return true;
	}
	template<class T>
	bool readFloat(T &x)
	{
		long double nowpos=0.1;
		x=0;
		while(*buf&&isspace(*buf)) ++buf;
		if(*buf==0) return false;
		static bool flag,decimal;
		decimal=flag=0;
		if(*buf=='-') flag=true,++buf;
		else if(*buf=='.') decimal=true;
		while(isdigit(*buf)||*buf=='.')
		{
			if(*buf=='.') decimal=true;
			else
			{
				if(decimal)
				{
					x+=nowpos*(*buf-'0');
					nowpos*=0.1;
				}
				else
				{
					x=x*10+*buf-'0';
				}
			}
			++buf;
		}
		return true;
	}
	bool readChar(char c)
	{
		if(*buf==0) return 0;
		return c=*buf++,1;
	}
	bool readString(char *s)
	{
		while(*buf&&isspace(*buf)) ++buf;
		if(!*buf) return false;
		while(!isspace(*buf)) *s++=*buf++;
		*s++=0;
		return true;
	}
	int countSpacetonext(){
		int total=0;
		while(*buf&&*buf==' ') ++total,++buf;
		return total;
	}
	bool splitBycharactor(char *s,char Split='\n'){
		while(*buf&&*buf!=Split) *s++=*buf++;
		*s++=0;
		return *buf!=0;
	}
};

struct EDGE{
	int T;EDGE *Nxt;
};
const int MOD = 924844033;
const int R = 5;

const int MAXN=524290;

namespace NTT{
	inline int powmod(LL x, int y){
		LL ret=1;
		while(y){
			if(y&1){
				if(MOD<=(ret*=x)) ret%=MOD;
			}
			y>>=1;
			if(MOD<=(x*=x)) x%=MOD;
		}
		return int(ret);
	}
	inline int inverse(int x){
		return powmod(x, MOD - 2);
	}
	void NFT(int P[], int n, int oper) {
		for (int i = 1, j = 0; i < n - 1; ++i) {
			for (int s = n; j ^= s >>= 1, ~j & s;);
			if (i < j) {
				swap(P[i], P[j]);
			}
		}
		for (int d = 0; (1 << d) < n; ++d) {
			int m = 1 << d, m2 = m * 2;
			int unit_p0 = powmod(R, (MOD - 1) / m2);
			if (oper < 0) {
				unit_p0 = inverse(unit_p0); 
			}
			for (int i = 0; i < n; i += m2) {
				int unit = 1;
				for (int j = 0; j < m; ++j) {
					int &P1 = P[i + j + m], 
						&P2 = P[i + j];
					int t = (long long)unit * P1 % MOD;
					P1 = (P2 - t + MOD) % MOD;
					P2 = (P2 + t) % MOD;
					unit = (long long)unit * unit_p0 % MOD;
				}
			}
		}
	}
	int A[MAXN],B[MAXN];
	void NTT(int FA[],int FB[],int len){
		int N=1;
		while(N<len*2){
			N<<=1;
		}
		for(int i=0;i<len;++i){
			A[i]=FA[i];
			B[i]=FB[i];
		}
		for(int i=len;i<N;++i){
			A[i]=B[i]=0;
		}
		NFT(A,N,1);
		NFT(B,N,1);
		for(int i=0;i<N;++i) A[i]=1LL*A[i]*B[i]%MOD;
		NFT(A,N,-1);
		long long tmp=inverse(N);
		for(int i=0;i<N;++i){
			FA[i]=A[i]*tmp%MOD;
		}
	}
}
long long fact[200001];
long long invfact[200001];
long long inv[200001];

vector<int> V[200001];
int sz[200001];
bool vis[200001];
void dfs(int x){
	sz[x]=1;
	vis[x]=1;
	while(V[x].size()){
		if(!vis[V[x].back()]){
			dfs(V[x].back());
			sz[x]+=sz[V[x].back()];
		}
		V[x].pop_back();
	}
}
int FA[MAXN];
int FB[MAXN];
int main(){
	fact[0]=invfact[0]=1;
	for(int i=1;i<=200000;++i){
		fact[i]=fact[i-1]*i%MOD;
		inv[i]=i==1?1:MOD-MOD/i*inv[MOD%i]%MOD;
		invfact[i]=invfact[i-1]*inv[i]%MOD;
	}
	int N;
	scanf("%d",&N);
	for(int i=1;i<N;++i){
		int x,y;
		scanf("%d%d",&x,&y);
		V[x].push_back(y);
		V[y].push_back(x);
	}
	dfs(1);
	for(int i=2;i<=N;++i){
		FA[sz[i]]=(FA[sz[i]]+fact[sz[i]])%MOD;
		FA[N-sz[i]]=(FA[N-sz[i]]+fact[N-sz[i]])%MOD;
	}
	for(int i=0;i<=N;++i){
		FB[i]=invfact[N-i];
	}
	NTT::NTT(FA,FB,N+1);
	for(int i=1;i<=N;++i){
		long long tmp=N*fact[N]%MOD*invfact[i]%MOD*invfact[N-i]%MOD-(FA[N+i]*invfact[i])%MOD;
		if(tmp<0) tmp+=MOD;
		printf("%d\n",int(tmp));
	}
	return 0;
}


Measured memory_bytes: 31104