One day, Takahashi was given the following problem from Aoki:

* You are given a tree with N vertices and an integer K. The vertices are numbered 1 through N. The edges are represented by pairs of integers (a_i, b_i).
* For a set S of vertices in the tree, let f(S) be the minimum number of the vertices in a subtree of the given tree that contains all vertices in S.
* There are <image> ways to choose K vertices from the trees. For each of them, let S be the set of the chosen vertices, and find the sum of f(S) over all <image> ways.
* Since the answer may be extremely large, print it modulo 924844033(prime).



Since it was too easy for him, he decided to solve this problem for all K = 1,2,...,N.

Constraints

* 2 ≦ N ≦ 200,000
* 1 ≦ a_i, b_i ≦ N
* The given graph is a tree.

Input

The input is given from Standard Input in the following format:


N
a_1 b_1
a_2 b_2
:
a_{N-1} b_{N-1}


Output

Print N lines. The i-th line should contain the answer to the problem where K=i, modulo 924844033.

Examples

Input

3
1 2
2 3


Output

3
7
3


Input

4
1 2
1 3
1 4


Output

4
15
13
4


Input

7
1 2
2 3
2 4
4 5
4 6
6 7


Output

7
67
150
179
122
45
7
#include<bits/stdc++.h>
const int N = 524288, P = 924844033;
int ri() {
	char c = getchar(); int x = 0, f = 1; for(;c < '0' || c > '9'; c = getchar()) if(c == '-') f = -1;
	for(;c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) - '0' + c; return x * f;
}
int w[N], R[N], a[N], b[N], sz[N], to[N << 1], nx[N << 1], pr[N], f[N], g[N], tp, L, InvL, n;
int fix(int x) {return (x >> 31 & P) + x;}
int add(int a, int b) {return a += b, a >= P ? a - P : a;}
int mul(int a, int b) {return 1LL * a * b % P;}
void ins(int u, int v) {to[++tp] = v; nx[tp] = pr[u]; pr[u] = tp;}
void adds(int u, int v) {ins(u, v); ins(v, u);}
int Pow(int x, int k) {
	int r = 1;
	for(;k; x = mul(x, x), k >>= 1)
		if(k & 1)
			r = mul(r, x);
	return r;
}
int Inv(int x) {return Pow(x, P - 2);}
void Pre(int m) {
	L = 1; int x = 0;
	for(;(L <<= 1) < m; ++x) ;
	for(int i = 1;i < L; ++i)
		R[i] = R[i >> 1] >> 1 | (i & 1) << x;
	w[0] = 1; int wn = Pow(5, (P - 1) / L);
	for(int i = 1;i < L; ++i)
		w[i] = mul(w[i - 1], wn);
	InvL = Inv(L);
}
void DFT(int *F) {
	for(int i = 0;i < L; ++i)
		if(i < R[i])
			std::swap(F[i], F[R[i]]);
	for(int i = 1, d = L >> 1; i < L; i <<= 1, d >>= 1)
		for(int j = 0;j < L; j += i << 1) {
			int *l = F + j, *r = F + j + i, *p = w, tp;
			for(int k = i; k--; ++l, ++r, p += d)
				tp = mul(*r, *p), *r = fix(*l - tp), *l = add(*l, tp);
		}
}
void Dfs(int u, int f) {
	sz[u] = 1;
	for(int i = pr[u]; i; i = nx[i])
		if(to[i] != f)
			Dfs(to[i], u),
			sz[u] += sz[to[i]],
			--a[sz[to[i]]];
	--a[n - sz[u]];
}
int main() {
	n = ri();
	f[0] = 1; for(int i = 1;i <= n; ++i) f[i] = mul(f[i - 1], i);
	g[n] = Inv(f[n]); for(int i = n;i; --i) g[i - 1] = mul(g[i], i);
	for(int i = 1;i < n; ++i)
		adds(ri(), ri());
	Dfs(1, 0); a[n] = n;
	for(int i = 1;i <= n; ++i)
		a[i] = mul(fix(a[i]), f[i]);
	for(int i = 0;i <= n; ++i)
		b[n - i] = g[i];
	Pre((n << 1) + 1);
	DFT(a); DFT(b);
	for(int i = 0;i < L; ++i)
		a[i] = mul(a[i], b[i]);
	DFT(a);
	for(int i = 1;i <= n; ++i) 
		printf("%d\n", mul(mul(a[L - n - i & L - 1], InvL), g[i]));
	return 0;
}
