#P3945. Traveling Cube

    ID: 2936 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 10 上传者: 标签>数据结构树状数组Asia Regional ContestAizu2008

Traveling Cube

描述

在一个名为班代的小星球上,宇宙飞船田波川号的登陆队发现彩色立方体在星球表面的平坦区域(被命名为床)上移动。立方体在床的某个位置出现,在上面移动一段时间后消失。经过长时间观察,田波川号的科学官奥川·阿莉莎中尉发现了立方体在床上移动的规则。

床是一个由相同大小的正方形瓷砖铺成的矩形区域。

其中一个正方形是红色的, 一个是绿色的, 一个是蓝色的, 一个是青色的, 一个是品红色的, 一个是黄色的, 一个或多个是白色的, 其他所有(如果有的话)是黑色的。

最初,立方体出现在其中一个白色正方形上。立方体的面颜色如下:

顶部:红色 底部:青色 北面:绿色 南面:品红色 东面:蓝色 西面:黄色

立方体可以在当前正方形的一条边上滚动一步,从而滚到相邻的正方形上。当立方体滚到一个有颜色的正方形(红色、绿色、蓝色、青色、品红色或黄色)上时,滚动后立方体的顶面颜色应该与该正方形相同。当立方体滚到白色正方形上时,没有这样的限制。立方体永远不应该滚到黑色正方形上。

在整个移动过程中,立方体只能访问每个有颜色的正方形一次,而可以任意多次访问任何白色正方形。如前所述,立方体永远不能访问任何黑色正方形。在访问最后一个有颜色的正方形后,立方体消失。不知何故,我们在移动开始前就知道了访问有颜色正方形的顺序。

你的任务是找到立方体按照给定顺序访问所有有颜色正方形所需的最少步数。

输入

输入是一系列数据集。每个数据集的格式如下:

w d

c11 ... cw1

.

.

.

c1d ... cwd

v1v2v3v4v5v6

第一行是一对正整数w和d,用空格分隔。接下来的d行是长度为w的字符串c11 ... cw1, ..., c1d ... cwd,中间没有空格。每个字符cij是字母r、g、b、c、m、y、w和k中的一个,分别代表红色、绿色、蓝色、青色、品红色、黄色、白色和黑色,或者是符号#。在每个数据集中,r、g、b、c、m、y和#各出现一次且仅出现一次。最后一行是一个长度为6的字符串v1v2v3v4v5v6,它是"rgbcmy"的一个排列。

整数w和d分别表示床的宽度(从东端到西端的长度)和深度(从北端到南端的长度)。单位是正方形边长。你可以假设w和d都不大于30。

每个字符cij表示床上一个正方形的颜色。字符c11、cw1、c1d和cwd分别对应床的西北角、东北角、西南角和东南角。如果cij是一个字母,它表示相应正方形的颜色。如果cij是一个#,相应的正方形是白色的,并且是立方体的初始位置。

字符串v1v2v3v4v5v6表示要访问的正方形颜色的顺序。立方体应该按照这个顺序访问颜色为v1、v2、v3、v4、v5和v6的正方形。

输入的结束由一行包含两个用空格分隔的零表示。

输出

对于每个输入数据集,如果有解,输出最少的步数;如果无解,输出"unreachable"。在任何情况下,都应该为每个输入数据集在一行中打印结果。

输入数据 1

10 5
kkkkkwwwww
w#wwwrwwww
wwwwbgwwww
kwwmcwwwkk
kkwywwwkkk
rgbcmy
10 5
kkkkkkkkkk
k#kkkkkkkk
kwkkkkkwwk
kcmyrgbwwk
kwwwwwwwwk
cmyrgb
10 5
kkkkkkkkkk
k#kkkkkkkk
kwkkkkkwkk
kcmyrgbwwk
kwwwwwwwwk
cmyrgb
0 0

输出数据 1

9
49
unreachable