#9866. 树上的括号序列
树上的括号序列
题目描述
对无向树上的深度优先搜索很了解,他确信你也很熟悉。如果你不熟悉的话, 很高兴与你分享伪代码片段:
function dfs(int cur, int parent):
print(`(`)
for all nxt that cur is adjacent to:
dfs(nxt, cur)
print(`)`)
你可能注意到, 在进入一个节点时打印 (,在离开一个节点时打印 )。因此,当他完成这次深度优先搜索时,在他的控制台中,他会看到一个长度为 的括号序列,其中 是树中顶点的数量。
显然,如果树是无向的,节点没有标记(意味着所有节点都是平等对待的),在进行深度优先搜索时,你可以得到许多不同的括号序列。这有两个原因。首先,当你在 时,你可以在访问 时遵循 相邻的任意节点的任意排列。其次,在开始深度优先搜索时,树的入口,也就是根节点,是不确定的。
因此, 忍不住想知道他可能得到多少个不同的括号序列。由于答案可能非常大,输出它对 取模的结果。
输入格式
输入的第一行包含一个整数 ,表示测试用例的数量。
对于每个测试用例,树以标准格式给出,你可能非常熟悉:
第一行 ,树的大小;
然后 行,每行包含两个用空格分隔的整数 ( , ),表示一条边。
所有测试用例中 的总和不超过 。
输出格式
对于每个测试用例,输出一行答案。
3
4
1 3
2 3
4 3
5
1 2
2 3
3 4
4 5
5
1 2
2 3
3 4
3 5
2
4
8
样例分析
如上所述。
数据范围与提示
对于 的数据:, 。