有一个叫滚木块的电脑游戏,需要在一个R×C的矩形区域内将一个1×1×2的盒子推到特定位置。这个盒子可以躺下并占据两个相邻的单元格或者站立并占据一个单元格,可以将盒子向四个方向推动,盒子会向推动的方向旋转90度。而区域内有3种单元格,分别为空格,硬格和易碎格。其中硬格可以支撑盒子的全部重量,所以这种单元格上可以是横躺下的盒子的一半或者是立着的一整个盒子。易碎格只能支撑半个盒子的重量,所以它上面不能是立着的一整个盒子。空格则不能支撑任何重量,因此盒子的任何部分都不能在空格上。游戏的目标是以最少的推动次数使得盒子站立在唯一的目标单元格上。
多组数据,每组数据第一行两个整数R和C。接下来R行每行C个字符表示地图,其中’O’表示目标单元格,’X’表示盒子的位置,盒子初始状态可以是站立或者横躺的,’#’表示空格,地图的边缘会有一圈的空格,’.’表示硬格,’E’表示易碎格,目标格和盒子初始所覆盖的位置均为硬格。当一组数据以0 0开始时结束输入。
对于每一组输入数据,输出一个整数表示最少的推动数,若不能到达目标则输出”Impossible”。
请输入正确的证书编号
学员姓名:孙兴民
课程:Scratch Level 1
发证日期:2019.08.15