在树上游玩
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld

题目描述

\hspace{15pt}对于给定的由 n 个节点组成的无根树,每一条边都可以被染上颜色,初始时,全部边均为白色。
\hspace{15pt}现在,选中树上 k 个不同的点,并将它们标记,随后,定义,如果一条树边 (u, v) 满足节点 uv 同时被标记,那么这条树边自动被染为红色,不需要花费任何代价。

\hspace{15pt}现在,你可以额外选择一些树边,将它们染成红色,每染一条边需要花费 1 点代价。
\hspace{15pt}请你计算最小的染色代价,使得任意一个被标记的点都可以通过被染成红色的边到达至少一个未被标记的点。并输出不同的染色方案数量。

输入描述:

\hspace{15pt}第一行输入两个整数 n,k\left(2\leqq n\leqq 10^5;\ 1\leqq k\lt n\right) 代表树的节点数、被标记的点数。
\hspace{15pt}第二行输入 k 个不同的整数 a_1,a_2,\dots,a_k\left(1\leqq a_i\leqq n\right) 代表被标记的点的编号。
\hspace{15pt}此后 n-1 行,第 i 行输入两个整数 u_i,v_i\left(1\leqq u_i,v_i\leqq n,u_i\neq v_i\right) 代表第 i 条树边连接 u_iv_i

输出描述:

\hspace{15pt}在一行上输出两个整数,代表最小的染色代价、满足条件的染色方案数量。由于染色方案数量可能很大,请输出对 10^9+7 取模后的结果。
示例1

输入

复制
11 6
8 2 4 7 9 6
8 10
8 9
1 8
1 11
1 3
11 2
5 6
2 5
4 2
7 6

输出

复制
3 4

说明

\hspace{15pt}在这个样例中,树的形态如下图所示。