图论
题号:NC293219
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

给你一棵有 n 个节点的树 T 和一个大小为 m 的节点编号不重集合 V,定义一个树 T 上的边集 E 是好的当且仅当在树上删掉所有在 E 中的边后集合 V 内的任意不同两点不连通。
请你求出一个边集 E',满足 E' 中边的数量在所有好的 E 中最小,特别地,当存在多个符合条件的 E' 时,可以输出任意一个。

【树】是指这样的一张图,其由 n 个节点和 n-1 条边构成,其上的任意两个点都连通,且不存在环。

输入描述:

第一行输入两个正整数 n, m(1 \leq m \leq n \leq 10^5)
此后 n-1 行,第 i 行输入两个整数 u_iv_i\ (1 \leqq u_i, v_i \leqq n;\ u_i \neq v_i) 表示树上第 i 条边连接节点 u_iv_i 。保证树连通。
后面有一行 m 个整数,表示集合 V 中的节点编号。

输出描述:

第一行有一个非负整数 k,表示集合 E' 内的元素数量。
此后 k 行第 i 行输出两个整数 u_i 和 v_i\ (1 \leqq u_i, v_i \leqq n;\ u_i \neq v_i) 表示删除的第 i 条边连接节点 u_i 和 v_i 。
示例1

输入

复制
5 3
1 2
2 3
3 4
4 5
1 3 5

输出

复制
2
4 5
2 3
示例2

输入

复制
5 2
1 2
2 3
3 4
4 5
1 2

输出

复制
1
1 2
示例3

输入

复制
5 1
1 2
2 3
3 4
4 5
1

输出

复制
0

说明

E 可以为空