C :: Painted Cube

Time Limit: 15 Seconds    Memory Limit: 65536 KB

Once the ring of power had been found to be in Frodo's possession, Gandalf immediately rode to seek the counsel of the head of his order, Saruman. Saruman disagreed with Gandalf's belief that they should destroy the ring. He decided that he could not immediately let Gandalf go free and help Frodo, so he locked Gandalf in the highest room of his dark tower in Isengard. To keep Gandalf occupied, he placed a single door in the room that was only escapable by solving its riddle.

After a short while searching through the room for an escape, Gandalf noticed a most peculiar lock on a door that appeared to lead to the roof of the tower. The lock was a standard six sided cube with no markings on any of its surfaces. It was placed on top of a grid of size m x n. The grid had exactly six squares with paint on them. Gandalf noticed that when he rolled a blank face of the cube onto a square that had painted markings on it, the markings were transferred from the grid onto the face of the cube. When the cube was rolled onto a square where no markings were painted, and the contact surface of the cube had a marking on it, the marking was transferred from the cube to the grid. If the cube was rolled over a square on the grid that had a marking on it and the contact surface of the cube had a marking on it of any kind, then nothing happened.

Gandalf surmised that opening the door to the roof could only occur if the cube was rolled by a sequence of moves to the goal square, such that all of the markings from the grid were transferred to the cube. Furthermore, to escape Saruman's trap, he (correctly) guessed that he would need to accomplish this in the minimum number of moves.

Given an initial confguration of paint on the squares, an initial location of the cube, and a desired goal location, what is the minimum number of moves that Gandalf must perform to get the cube to the goal state with paint on all of its sides?

For the first example (see below), a sample solution would be down, right, right, up, right, right, down, left, right, left.

Input

The input file will contain multiple test cases. Each test case will consist of an m x n grid of characters, where m and n are each between 2 and 20. Within each test case, empty spaces will be described by '.', painted squares by 'P', illegal squares by '#', the initial position of the cube by 'C', and the goal square by 'G'. There will always be exactly 6 'P's, exactly one 'C', exactly one 'G', and no more than 12 '.'s. Input test cases will be separated by a single blank line. The input will
be terminated by the end of file.

be terminated by the end of file.

Output

For each input test case, print the minimum number of moves required to obtain the goal state. If it is not possible to achieve this state, print -1.

Sample Input

C.PPP
PPPG.

C....
G##.P
.##PP
..PPP

PPP
PCP
PG.

.PPPCPPP..
....G.....

Sample Output

10
23
15
21
Submit

Source: Pacific Northwest 2012