Description
一棵树上有 K 只羊,树是一个没有环的简单连通图。这棵树有 N 个节点,用 1 到 N表示。树的每个节点最多只能住一只羊。Soaring 意识到,狼迟早会学会爬树。为了保护羊,Soaring 决定安排一些牧羊人住在在树中某些节点上,以确保每只羊至少被一个牧羊人保护。众所周知,每个牧羊人都会保护所有离他最近的羊,且只会保护它们。羊和牧羊人的距离等于两者之间简单路径的边数包含绵羊的节点和包含shepherd 的节点之间一路径上的节点。此外,牧羊人可以跟羊住在一起,当然,这种情况下,牧羊人只保护这只羊。计算最少需要放置多少个牧羊人,使得每只羊都至少被一个牧羊人保护。另外,输出一种放置方案。
Input
输入文件名为 shepherd.in。
第一行两个整数 N 和 K(1<=K<=N)
接下来 N-1 行,每行包含两个整数 a
i
和 b
i
(1≤ai,bi≤N),描述树中的边。
接下来一行包含 K 个不同的整数 O
i
(1≤O
i
≤N),表示 K 只羊居住的节点编号。
Output
输出文件名为 shepherd.out。
第一行输出一个数字 X,表示最小需要的牧羊人数。
第二行输出 X 个空格分隔的整数, 表示牧羊人居住的节点编号。
如果有多个方案,输出其中任何一个。
Sample Input
input1:
4 2
1 2
2 3
3 4
1 4
input2:
9 5
1 2