#Lutece0036. Sack the Quarterback

Sack the Quarterback

Migrated from Lutece 36 Sack the Quarterback

All parts of this problem, including description, images, samples, data and checker, might be broken. If you find bugs in this problem, please contact the admins.

Description

在美式足球中,四分卫负责指挥整只球队的进攻战术和跑位,以及给接球员传球的任务。四分卫是一只球队进攻组最重要的球员,而且一般身体都相对比较弱小,所以通常球队会安排55-77名大汉来保护他,其中站在四分卫前方、排成一线的55名球员称为进攻锋线,他们通常都是135135公斤左右的壮汉。

对防守方来说,攻击对手的四分卫当然是最直接的限制对手进攻的方法。如果效果好,就可以在对方四分卫传球之前将其按翻在地,称之为擒杀。擒杀是最好的鼓舞防守队士气的方法,因为对方连传球的机会都没有,进攻就结束了,还必须倒退一些距离开球。凶狠的擒杀甚至能够将对方的四分卫弄伤,从而迫使对方更换这个进攻核心。

在本题中,输入给出准备擒杀四分卫的防守球员的位置、对方每个进攻锋线球员的位置以及对方四分卫的位置,你的任务是求出这名准备擒杀的防守球员至少要移动多少步,才能够擒杀对方四分卫。

假设对方进攻锋线和四分卫在这个过程中都不会移动。只有11名防守球员,防守球员只要碰到对方四分卫就算擒杀。

所有的球员都是一块连续的、不中空的22维区域。防守球员不可以从进攻锋线的身体上穿过,也不可以从界外穿过(只能走空地)。

防守队员不可以转动身体,只能平移。防守队员的身体所有部分向同一个方向(上、下、左、右)移动1格的过程叫做11步。

Input

输入包含多组数据。每组数据第一行都是两个整数HH,WW(0<H0<H,W100W\leq 100),表示整个区域的高度和宽度,H=W=0H=W=0表示输入结束。接下来有HH行,每行WW个字符。每个字符如果是.,表示这里是空地,如果是O,表示是进攻锋线队员的身体,如果是D,表示是准备擒杀的防守球员的身体,如果是Q,表示是四分卫的身体。

输入保证符合上面的条件。防守球员的身体总共不超过2020格。

Output

对每组数据,输出包含擒杀所需最少步数的一行。如果不能擒杀,输出带Impossible的一行。

Samples

6 6
.Q....
QQ..OO
.OO..O
...O.O
OO.O..
....DD
7 7
.Q.....
QQ.OOO.
...O...
O......
OO..OO.
.O.....
.....DD
0 0
Impossible
9

Resources

电子科技大学第六届ACM程序设计大赛 决赛