首先统计每个二叉树拥有最大高度的叶子数量。
对于每个叶子,其可以有左儿子和右儿子。
对于 a 和 b 两棵树,ca 表示 a 拥有最大高度的叶子数量,cb 表示 b 拥有最大高度的叶子数量。
如果 a 在 b 上面,有 ca×2 种选择。
如果 b 在 a 上面,有 cb×2 种选择。
小红有 n 个二叉树,他准备把这些二叉树拼接起来,拼接的方式是: 选择一个二叉树 a 的一个叶子,将二叉树 b 的根作为该叶子的左儿子或者右儿子。这样就把 a 和 b 拼接起来了。
现在小红想要拼接出的二叉树的高度尽可能高,他想问你一共有多少种不同的拼接方案数。
第一行,两个正整数 m,n(1≤m≤n≤2×105) ,表示二叉树的个数和所有二叉树的结点数之和。
接下来是 n 个二叉树,每个二叉树输入如下: 首先一行输入二叉树的结点数 ci ,之后 ci−1 行,每行两个点表示这两个点之间有一条父子边。
保证输入的 ci−1 条边构成的一定是一棵二叉树,如果一个结点只有一个儿子,那么这个儿子就是左儿子。
注意:对于第 i 个二叉树,其中 ci 个结点的编号为 1 到 ci ,每个结点编号各不相同,结点编号为 1 的结点为二叉树的根结点。
一个整数,表示不同的拼接方案数。答案对 109+7 取模。
输入
2 5
3
1 2
1 3
2
1 2
输出
6
说明
第 1 个二叉树形如:
1
/ \
2 3
第二个二叉树形如:
1(4)
/
2(5)
那么可以转换成拼接成如下 6 种情况:
(1)
1
/ \
2 3
/
1(4)
/
2(5)
(2)
1
/ \
2 3
\
1(4)
/
2(5)
(3)
1
/ \
2 3
/
1(4)
/
2(5)
(4)
1
/ \
2 3
\
1(4)
/
2(5)
(5)
1(4)
/
2(5)
/
1
/ \
2 3
(6)
1(4)
/
2(5)
\
1
/ \
2 3