有许多优秀的策略桌游,其中你最喜欢的一款叫做“钢铁时代”(Steel Age)。它提供了许多通往胜利的途径,但你更偏爱“血与火”的策略:尽可能多地建造士兵,并将你的对手彻底击溃。为了建造士兵,你需要两种资源:铁矿石和煤炭。
游戏棋盘由编号为 $1$ 到 $n$ 的不同单元格组成,这些单元格中可能包含资源。从一个单元格移动到另一个单元格的规则相当复杂:如果你能从单元格 A 移动到单元格 B,并不意味着你一定能从 B 移动到 A。例如,如果两个单元格由河流连接,你可能可以顺流而下,但除非你发明了蒸汽机,否则无法逆流而上;不过,通过道路并绕道其他单元格,仍有可能到达上游的单元格。
游戏开始时,你只拥有一个单元格,所有的定居者都位于该单元格中。在每一步移动中,你可以将任意数量的定居者从一个单元格移动到其可达的邻居单元格。当你第一次将定居者移入某个单元格时,你就“占领”了它。每个被占领的单元格都需要绑定一名定居者,该定居者必须留在该单元格中直到游戏结束。然而,你不需要在初始单元格中留下定居者,因为那是你的宫殿所在地,所以该单元格始终处于被占领状态。
你的目标是至少占领一个包含“铁矿石”资源的单元格和至少一个包含“煤炭”资源的单元格,以便能够建造士兵。请问达到此目标所需的最少定居者数量是多少?
输入格式
输入包含:
- 一行,包含三个整数 $n$ ($2 \le n \le 10^5$),表示棋盘上的单元格数量;$m$ ($1 \le m < n$),表示包含铁矿石的单元格数量;$k$ ($1 \le k < n$),表示包含煤炭的单元格数量。
- 一行,包含 $m$ 个不同的整数 $o_1, \dots, o_m$ ($1 \le o_i \le n$,对于所有 $1 \le i \le m$),其中 $o_1, \dots, o_m$ 是包含铁矿石的单元格 ID。
- 一行,包含 $k$ 个不同的整数 $c_1, \dots, c_k$ ($1 \le c_i \le n$,对于所有 $1 \le i \le k$),其中 $c_1, \dots, c_k$ 是包含煤炭的单元格 ID。
- $n$ 行,描述棋盘的拓扑结构。该部分的第 $j$ 行指定了第 $j$ 个单元格可达的邻居,包含以下整数:
- 一个整数 $0 \le a \le 10$,表示从单元格 $j$ 可达的单元格数量。
- $a$ 个不同的整数 $b_1, \dots, b_a$ ($1 \le b_i \le n, b_i \neq j$,对于所有 $1 \le i \le a$),表示从单元格 $j$ 可达的单元格 ID。
保证没有任何单元格同时包含铁矿石和煤炭。游戏开始时,你只拥有 ID 为 $1$ 的单元格。
输出格式
输出达到目标所需的最少定居者数量,即至少占领一个包含煤炭的单元格和一个包含铁矿石的单元格。如果无法同时拥有煤炭和铁矿石,则输出 impossible。
样例
样例输入 1
3 1 1 2 3 1 2 2 3 1 1 1
样例输出 1
2
样例输入 2
3 1 1 2 3 1 2 1 1 2 1 2
样例输出 2
impossible