题库练习 Jumping Man
← 上一题 下一题 →

A16498 | Jumping Man

时间限制1s
内存限制256MB
通过 / 提交0/0

题目描述

你有一棵根植于节点 $1$ 的树,树上有 $n$ 个节点。每个节点上都写有一个小写英文字母。

对于从 $1$ 到 $n$ 的每个整数 $i$,请分别解决下面的问题:

- 考虑由以下过程形成的字符串集合:

- 选择位于 $i$ 子树中的任意节点 $u$ 作为起始位置。
- 重复 0 次或更多次:
- 假设你当前位于节点 $x$ 上,则你可以选择位于节点 $x$ 的子树 $^{\text{∗}}$ 中的节点 $v$,要求 $(v \ne x)$,并移动到节点 $v$。你可以在任何时候终止这类操作。
- 将你经过的所有节点上的字符顺次连接成一个字符串。

你对每条可能的路径都执行了一次上述过程。如果在一条路径中访问了一个节点,而在另一条路径中没有访问,则认为这两条路径是不同的。

现在,你已经得到了许多字符串。你想知道每种字符串出现次数的平方和。由于答案可能非常大,请输出其值取模 $998\,244\,353$ 。


$^{\text{∗}}$ 当且仅当从节点 $1$ 到节点 $v$ 的最短路径经过节点 $x$ 时,节点 $v$ 在另一个节点 $x$ 的子树中。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 $t$($1 \le t \le 5000$)。测试用例说明如下。

对于每个测试用例,第一行包含一个整数 $n$($1 \le n \le 5000$)。

下一行是长度为 $n$ 的字符串,只包含小写英文字母,其中第 $i$ 个字符代表第 $i$ 个节点上的字母。

接下来是 $n-1$ 行,每行包含两个整数 $u$ 和 $v$($1 \leq u,v \leq n, u \neq v$),代表树的一条边。

保证所有测试用例的 $n$ 之和不超过 $5000$ 。

输出格式

对于每个测试用例,在新行中输出 $n$ 个数字,分别为 $i=1,2,\ldots,n$ 的答案,模数 $998\,244\,353$ 。

输入输出样例

输入 #1
5
3
abb
1 2
1 3
2
aa
1 2
4
ccbb
1 2
2 3
2 4
4
aaaa
1 4
4 2
2 3
10
cacbcccbac
1 2
2 3
3 4
2 5
1 6
2 7
3 8
4 9
8 10
输出 #1
9 1 1 
5 1 
29 9 1 1 
69 5 1 19 
185 65 19 3 1 1 1 3 1 1
C++ 编辑器
输入
输出