#CF2070D. 树上跳跃

树上跳跃

D. 树上跳跃

每个测试点的时间限制:22
每个测试点的内存限制:512512 兆字节


题目描述

给定一棵有根树,包含 nn 个顶点。顶点编号为 11nn,根为顶点 11
dxd_x 为从根到顶点 xx 的距离(最短路径上的边数)。

最初,一枚棋子放在根结点。你可以执行以下操作任意次(包括零次):

  • 将棋子从当前顶点 vv 移动到某个顶点 uu,满足 du=dv+1d_u = d_v + 1
    如果 vv 是根,你可以选择任意满足该约束的顶点 uu
    但如果 vv 不是根,则 uu 不能是 vv 的邻居(即 vvuu 之间不能有边直接相连)。

例如,在题目所给的树中,以下移动是可行的:

$$1 \rightarrow 2,\quad 1 \rightarrow 5,\quad 2 \rightarrow 7,\quad 5 \rightarrow 3,\quad 5 \rightarrow 4,\quad 3 \rightarrow 6,\quad 7 \rightarrow 6. $$

有效序列定义

一个顶点序列被称为有效,如果存在一种移动棋子的方式,使得棋子按顺序访问序列中的所有顶点(且只访问这些顶点)。

你的任务是计算有效顶点序列的数量。
由于答案可能很大,请输出它对 998244353998244353 取模的结果。


输入格式

第一行包含一个整数 tt1t1041 \le t \le 10^4)——测试用例的数量。

每组测试用例:

  • 第一行包含一个整数 nn2n31052 \le n \le 3 \cdot 10^5)。
  • 第二行包含 n1n-1 个整数 p2,p3,,pnp_2, p_3, \dots, p_n1pi<i1 \le p_i < i),其中 pip_i 是顶点 ii 的父结点。顶点 11 是根。

额外限制:所有测试用例的 nn 之和不超过 31053 \cdot 10^5


输出格式

对于每组测试用例,输出一个整数——有效顶点序列的数量,对 998244353998244353 取模。


示例

输入

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

输出

4
2
8

样例解释

第一个样例n=4n=4,父节点列表:p2=1,p3=2,p4=1p_2=1, p_3=2, p_4=1):
有效序列为:
[1], [1,2], [1,4], [1,4,3][1],\ [1,2],\ [1,4],\ [1,4,3]
44 个。

第二个样例n=3n=3,父节点列表:p2=1,p3=2p_2=1, p_3=2):
有效序列为:
[1], [1,2][1],\ [1,2]
22 个。

第三个样例n=7n=7,父节点列表:p2=1,p3=2,p4=2,p5=1,p6=4,p7=5p_2=1, p_3=2, p_4=2, p_5=1, p_6=4, p_7=5):
有效序列为:
$[1],\ [1,2],\ [1,2,7],\ [1,2,7,6],\ [1,5],\ [1,5,3],\ [1,5,3,6],\ [1,5,4]$。
88 个。


说明

  • 根结点到自身的距离 d1=0d_1 = 0
  • “不能是邻居”的条件意味着:当 vv 不是根时,不能跳转到 vv 的父结点或子结点,只能跳到“同一层”的其他非相邻顶点,但题目要求 du=dv+1d_u = d_v + 1,所以只能往下一层跳,且不能跳到自己子结点(因为子结点是邻居),因此实际上只能跳到下一层中不是自己孩子的结点