여행하는 정육면체
시간 제한1초메모리 제한128 MB
색이 정해진 여섯 개의 칸을 지정된 순서로 방문해야 하는 굴러가는 정육면체의 최소 이동 횟수를 격자에서 구합니다.
문제
반다이라는 작은 행성에서, 우주선 타다미가와의 착륙대는 행성 표면의 평평한 구역 위를 굴러다니는 색색의 정육면체를 발견했고, 그 구역을 침대(bed)라고 이름 붙였다. 정육면체는 침대의 어떤 위치에 나타나 한동안 이동하다가 사라진다. 과학 장교 앨리사 오가와 중위는 정육면체가 이동하는 규칙을 알아냈다.
침대는 같은 크기의 정사각형들로 채워진 직사각형 구역이다. 정확히 한 칸은 빨강, 한 칸은 초록, 한 칸은 파랑, 한 칸은 청록(cyan), 한 칸은 자홍(magenta), 한 칸은 노랑이다. 한 칸 이상은 흰색이고, 나머지 칸은 모두 검정이다.
정육면체는 먼저 흰색 칸 위에 나타난다. 각 면의 색은 다음과 같다. 윗면 빨강, 아랫면 청록, 북쪽 초록, 남쪽 자홍, 동쪽 파랑, 서쪽 노랑.
한 걸음마다 정육면체는 아랫면의 네 모서리 중 하나를 축으로 굴러 인접한 칸으로 넘어간다. 유채색 칸(빨강, 초록, 파랑, 청록, 자홍, 노랑)으로 굴러갈 때는, 구른 뒤의 윗면 색이 그 칸의 색과 같아야 한다. 흰색 칸으로 굴러갈 때는 그런 제약이 없다. 정육면체는 검정 칸으로는 절대 굴러갈 수 없다.
이동하는 동안 정육면체는 각 유채색 칸을 한 번만 방문할 수 있고, 흰색 칸은 몇 번이든 방문할 수 있으며, 검정 칸은 절대 방문할 수 없다. 마지막 유채색 칸을 방문하면 정육면체는 사라진다. 유채색 칸을 방문해야 하는 순서는 이동을 시작하기 전에 이미 알려져 있다.
그 순서가 주어질 때, 정육면체가 여섯 유채색 칸을 그 순서대로 모두 방문하는 데 필요한 최소 걸음 수를 구하라.
입력
입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.
w d
c(1,1) ... c(w,1)
...
c(1,d) ... c(w,d)
v1v2v3v4v5v6
첫째 줄에는 두 양의 정수 와 가 공백으로 구분되어 주어진다. 다음 개의 줄에는 공백 없이 개의 문자로 이루어진 문자열이 주어진다. 각 문자 는 r, g, b, c, m, y, w, k(빨강, 초록, 파랑, 청록, 자홍, 노랑, 흰색, 검정) 중 하나이거나 기호 #이다. r, g, b, c, m, y와 #은 각 데이터셋에서 정확히 한 번씩만 나타난다. 마지막 줄은 여섯 글자짜리 문자열 으로, "rgbcmy"의 순열이다.
는 침대의 너비(동서 길이), 는 깊이(남북 길이)이며 단위는 칸이다. 둘 다 을 넘지 않는다. 문자 은 북서쪽 모서리, 은 북동쪽, 는 남서쪽, 는 남동쪽 칸에 해당한다. 문자가 글자이면 그 칸의 색을 나타내고, #이면 그 칸은 흰색이며 정육면체의 시작 위치이다.
문자열 은 방문할 색의 순서를 나타낸다. 정육면체는 색의 칸을 이 순서대로 방문해야 한다.
공백으로 구분된 두 개의 이 있는 줄이 입력의 끝을 나타낸다.
출력
각 데이터셋에 대해, 최소 걸음 수를 한 줄에 출력한다. 그런 이동이 불가능하면 unreachable을 출력한다.