拯救公主
题号:NC214737
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

“影子传说传说着一个斗士”
“金色战盔散发出无限的能量”
“影子斗士是来自正义的化身”
“……”
影从邪恶忍者的营地里救下了被绑架的 Kiri 公主,但是不幸遭到了邪恶忍者的追杀。影曾经在一个遗迹中获得过一张传送卷轴,但是因为这张卷轴过于古老,已经失去了原有的功能,只能传送到某一些结点,并且只有一次使用机会,但是可以在这些结点中自由选择。
地图上的共有 n 个结点,标记为 ,以及 m 条双向道路,每条路连接两个结点。任意一条道路的长度都默认为 1。
影的传送卷轴一共能传送到 p 个结点,结点集合为 P。在地图上有 q 个安全区结点,结点集合为 Q。
由于影在使用完传送卷轴后会失去战斗力,需要迅速带着公主前往最近的安全区。
请你帮他寻找一条最短的前往任意安全区的路径,输出路径和。

输入描述:

第 1 行,包含两个整数 n 和 m 分别表示结点个数和连接结点的路径数
第 2 行,包含两个整数 p 和 q 分别表示传送卷轴能够到达的结点数量和安全区的数量
第 3 行,包含 p 个整数 ,表示传送卷轴能够到达的结点编号。
第 4 行,包含 q 个整数 ,表示安全区的结点编号。
行,每行包含 2 个整数 u,v,表示结点 u 和 v 之间存在一条长度为 1 的双向道路

输出描述:

输出一个整数表示使用传送卷轴后去最近的安全区的距离,若无法到达,则输出"-1"。
示例1

输入

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

输出

复制
2