Bob Roberts 自称是“汽车兽医”,他拥有几个废旧汽车回收场,人们可以来这里为他们(出了故障的)汽车寻找备用零件。每个回收场里的汽车都停放在一个 $m \times n$ 的围栏网格中,每辆车占据两个网格单元。每个回收场还有零个或多个专门用于堆放零件(挡泥板、8轨磁带播放器、轮毂盖、毛绒骰子等)的网格位置;这些位置实际上是不可通行的。生意太好了,以至于 Bob 的每个回收场只剩下一个空网格空间。
有时,Bob 或他的回收场管理员会把零件掉在地上,它会滚到某辆车下面。取回它的唯一方法是将车移开。根据空网格空间的位置,可能需要移动几辆车才能实现这一点。汽车只能向前或向后移动,且汽车的移动还受到围栏的限制(防止任何汽车移出回收场)以及包含零件堆的不可通行网格位置的限制。
图 A.1 展示了一个例子。一个双螺旋六角螺母滚到了网格第 3 行第 3 列的 3 号车下(深灰色阴影)。第 1 行第 3 列的空间是空的,第 3 行第 4 列的空间是不可通行的。取回零件的唯一方法是先移动 8 号车,然后是 4 号车,最后是 3 号车。注意,如果空网格单元和不可通行网格单元的位置互换,则无法取回该零件。
图 A.1:示例回收场。必须按顺序移动 8、4 和 3 号车,以露出第 3 行第 3 列的网格位置。这对应于样例输入 1。
这里的问题显而易见:对于给定的位置,Bob 想知道如何移动汽车来露出该位置,或者是否有可能露出它。
输入格式
输入的第一行包含两个正整数 $m$ 和 $n$ ($m, n \leq 250$),表示废旧汽车回收场的行数和列数。接下来是 $m$ 行,每行包含 $n$ 个整数;第 $i$ 行的第 $j$ 个值表示第 $i$ 行第 $j$ 列网格单元的内容。所有值 $v$ 都在范围 $-2 \leq v \leq 62\,500$ 内。每个非负值表示一辆废旧汽车的一半位于该位置。每个非负值恰好出现两次,且这两个出现位置在水平或垂直方向上相邻。值为 $-1$ 表示空网格位置,值为 $-2$ 表示不可通行位置。始终恰好有一个空位置和至少一辆车,但可能有零个或多个不可通行位置。在这些 $m$ 行之后,是包含两个整数 $r$ 和 $c$ ($1 \leq r, c \leq 250$) 的单行,表示想要露出的位置的行号和列号。这始终对应于一辆废旧汽车的位置。
输出格式
在一行中,用空格分隔,输出必须移动以使给定位置变为空的汽车编号。它们应按必须移动的顺序出现。如果存在多个可能的移动序列,则显示最短长度的序列。如果仍然存在平局,则显示根据序列中汽车编号按字典序排列最靠前的序列。如果无法露出所需位置,则显示 impossible。
样例
样例输入 1
4 4 8 8 -1 9 4 10 10 9 4 3 3 -2 16 16 2 2 3 3
样例输出 1
8 4 3
样例输入 2
4 4 8 8 -2 9 4 10 10 9 4 3 3 -1 16 16 2 2 3 3
样例输出 2
impossible