最不可思议的事情发生了!交通部门(Trafikverket,参见 https://open.kattis.com/problems/trafikverketsplan )制定的计划出了差错。就在小镇 Lönnköping 的人们准备下班回家之前,一场可怕的暴风雪摧毁了镇上所有的互联网。由于网络中断,他们无法获取有关 Trafikverket 计划的最新信息,因此无法在不冒碰撞风险的情况下开车回家。
现在,你的任务是找到一种让所有人安全回家且不发生任何碰撞的方法。Lönnköping 的道路网络由 $N$ 栋房屋和 $N - 1$ 条道路组成。每条道路直接连接两栋房屋。如果你在某栋房屋,你可以通过道路前往所有与当前房屋相连的房屋。该网络的设计保证了任意两栋房屋之间都可以通过一条或多条道路互相到达。
得益于在 Trafikverket 计划制定之前进行的数据收集,你已知每个人的位置(他们都在工作,且你知道他们工作的房屋)以及他们想回哪个家。现在,每个人都坐在他们工作单位外的车里,阻碍了其他车辆通过该房屋。为了让每个人安全回家,你将使用一架无人机飞来飞去,通知人们“开车回家”。然后,他们将沿着工作单位和家之间的最短路径不停车地开车回家。一旦他们到家,他们就会把车停进车库,不再阻碍任何道路。由于天气寒冷,无人机移动非常缓慢,因此你可以假设每个人都有足够的时间在无人机到达下一个人之前开车回家并停好车。
如果一辆车开始往家开,而途中(其路径上)有另一辆车挡路,由于路面湿滑,它们将会发生碰撞。请确定是否存在一种让所有车辆回家且完全不发生碰撞的顺序。如果存在这样的顺序,请将其找出来。
输入格式
输入的第一行包含两个整数 $N$ 和 $C$($1 \le C \le N \le 2 \cdot 10^5$),分别表示 Lönnköping 道路网络中的房屋数量和想要回家的人数。
接下来的 $N - 1$ 行,每行包含两个整数 $a$ 和 $b$($1 \le a, b \le N, a \neq b$),表示房屋 $a$ 和房屋 $b$ 之间有一条道路。保证可以通过一条或多条道路在任意两栋房屋之间通行。
接下来有 $C$ 行,每行包含两个整数 $W_i$ 和 $H_i$($1 \le W_i, H_i \le N$),分别表示第 $i$ 个人工作的房屋和居住的房屋。保证每栋房屋最多只有一个人作为起点(对于所有 $1 \le i, j \le C, i \neq j$,$W_i \neq W_j$)。
输出格式
如果存在一种能让居民在不发生碰撞的情况下开车的顺序,首先输出 Yes。然后,输出居民应该回家的顺序。输入中首先出现的居民对应顺序中的 1,第二个对应 2,依此类推。
如果不存在无碰撞的顺序,输出 No。
子任务
你的解法将在多个测试用例组上进行测试。要获得某个组的分数,必须通过该组中的所有测试用例。
| 组别 | 分值 | 数据范围 |
|---|---|---|
| 1 | 5 | $C \le 8, N \le 100$ |
| 2 | 10 | $N \le 100$ |
| 3 | 10 | $N \le 4000$,最长路径的长度小于 $50$。 |
| 4 | 25 | $N \le 4000$ |
| 5 | 50 | 无附加限制。 |
样例
输入样例 1
5 4 1 2 2 3 2 4 4 5 5 3 4 3 3 2 1 3
输出样例 1
Yes 3 4 2 1
输入样例 2
4 2 1 2 2 3 3 4 2 4 3 1
输出样例 2
No