eolymp
bolt
Try our new interface for solving problems
Problems

Sliding Block Puzzle

Sliding Block Puzzle

In sliding block puzzles, we repeatedly slide pieces (blocks) to open spaces within a frame to establish a goal placement of pieces. A puzzle creator has designed a new puzzle by combining the ideas of sliding block puzzles and mazes. The puzzle is played in a rectangular frame segmented into unit squares. Some squares are pre-occupied by obstacles. There are a number of pieces placed in the frame, one \textbf{2}×\textbf{2} king piece and some number of \textbf{1}×\textbf{1} pawn pieces. Exactly two \textbf{1}×\textbf{1} squares are left open. If a pawn piece is adjacent to an open square, we can slide the piece there. If a whole edge of the king piece is adjacent to two open squares, we can slide the king piece. We cannot move the obstacles. Starting from a given initial placement, the objective of the puzzle is to move the king piece to the upper-left corner of the frame. The following figure illustrates the initial placement of the fourth dataset of the sample input. \includegraphics{https://static.e-olymp.com/content/90/906853188252cf287bfa431ce264925349e1c721.jpg} \textit{\textbf{Figure 1}}: The fourth dataset of the sample input. Your task is to write a program that computes the minimum number of moves to solve the puzzle from a given placement of pieces. Here, one move means sliding either king or pawn piece to an adjacent position. \InputFile The input is a sequence of datasets. The first line of a dataset consists of two integers \textbf{H} and \textbf{W} separated by a space, where \textbf{H} and \textbf{W} are the height and the width of the frame. The following \textbf{H} lines, each consisting of \textbf{W}characters, denote the initial placement of pieces. In those \textbf{H} lines, '\textbf{X}', '\textbf{o}', '\textbf{*}', and '\textbf{.}' denote a part of the king piece, a pawn piece, an obstacle, and an open square, respectively. There are no other characters in those \textbf{H} lines. You may assume that \textbf{3} ≤ \textbf{H} ≤ \textbf{5}0 and \textbf{3} ≤ \textbf{W} ≤ \textbf{50}. A line containing two zeros separated by a space indicates the end of the input. \OutputFile For each dataset, output a line containing the minimum number of moves required to move the king piece to the upper-left corner. If there is no way to do so, output \textbf{-1}.
Time limit 30 seconds
Memory limit 128 MiB
Input example #1
3 3
oo.
oXX
.XX
3 3
XXo
XX.
o.o
3 5
.o*XX
oooXX
oooo.
7 12
oooooooooooo
ooooo*****oo
oooooo****oo
o**ooo***ooo
o***ooooo..o
o**ooooooXXo
ooooo****XXo
5 30
oooooooooooooooooooooooooooooo
oooooooooooooooooooooooooooooo
o***************************oo
XX.ooooooooooooooooooooooooooo
XX.ooooooooooooooooooooooooooo
0 0
Output example #1
11
0
-1
382
6807
Source ACM International Collegiate Programming Contest, Asia Regional Contest, Tokyo, 2012-11-18