#P9981. Rikka 与子集 IV

Rikka 与子集 IV

Rikka 与子集 IV

Problem Description

我们都知道,Rikka 的数学不好,Yuta 很担心这个状况。所以他给了 Rikka 一些数学题来练习,下面是其中一道。 给定一棵 nn 个点的有标号树,问树上有多少大小为 ii 的连通块,对于 1in1\le i\le n 输出答案。 两个连通块不同,当且仅当两个连通块的点集不同。

Input

第一行一个正整数 TT1T1001\le T\le 100),表示测试数据组数。 对于每组数据,第一行一个整数 nn2n1052\le n\le 10^5),表示树上点的个数。 第二行 n1n-1 个整数 p2,p3,,pnp_2,p_3,\ldots,p_n1pi<i1\le p_i < i),pip_i 表示 iipip_i 之间有一条边相连。 保证数据满足 n4×105\sum n\le 4\times 10^5

Output

对于每组数据,输出一行 nn 个整数,第 ii 个整数表示大小为 ii 的连通块个数,对 998244353998244353 取模。

Sample Input

3
5
1 1 2 2
6
1 1 2 2 3
6
1 1 2 2 5

Sample Output

5 4 4 3 1
6 5 5 4 3 1
6 5 5 5 3 1

Hint

本题中你可能需要更大的栈,我们建议在主函数使用如下代码扩充栈空间。 int main() { int size = 512 << 20; // 512M __asm__("movq %0, %%rsp\n" :: "r"((char *)malloc(size) + size)); // Your code exit(0); } 请注意,你必须使用 exit\texttt{exit} 函数结束程序,否则你的程序将被判为 RE。

Source

2024“钉耙编程”中国大学生算法设计超级联赛(6)