여행하는 정육면체

시간 제한1초메모리 제한128 MB

요약
색이 정해진 여섯 개의 칸을 지정된 순서로 방문해야 하는 굴러가는 정육면체의 최소 이동 횟수를 격자에서 구합니다.
난이도

보통10점 중 7점

유형
BFS, 시뮬레이션, 그래프
정답자
아직 제출이 없습니다

문제

반다이라는 작은 행성에서, 우주선 타다미가와의 착륙대는 행성 표면의 평평한 구역 위를 굴러다니는 색색의 정육면체를 발견했고, 그 구역을 침대(bed)라고 이름 붙였다. 정육면체는 침대의 어떤 위치에 나타나 한동안 이동하다가 사라진다. 과학 장교 앨리사 오가와 중위는 정육면체가 이동하는 규칙을 알아냈다.

침대는 같은 크기의 정사각형들로 채워진 직사각형 구역이다. 정확히 한 칸은 빨강, 한 칸은 초록, 한 칸은 파랑, 한 칸은 청록(cyan), 한 칸은 자홍(magenta), 한 칸은 노랑이다. 한 칸 이상은 흰색이고, 나머지 칸은 모두 검정이다.

정육면체는 먼저 흰색 칸 위에 나타난다. 각 면의 색은 다음과 같다. 윗면 빨강, 아랫면 청록, 북쪽 초록, 남쪽 자홍, 동쪽 파랑, 서쪽 노랑.

한 걸음마다 정육면체는 아랫면의 네 모서리 중 하나를 축으로 굴러 인접한 칸으로 넘어간다. 유채색 칸(빨강, 초록, 파랑, 청록, 자홍, 노랑)으로 굴러갈 때는, 구른 뒤의 윗면 색이 그 칸의 색과 같아야 한다. 흰색 칸으로 굴러갈 때는 그런 제약이 없다. 정육면체는 검정 칸으로는 절대 굴러갈 수 없다.

이동하는 동안 정육면체는 각 유채색 칸을 한 번만 방문할 수 있고, 흰색 칸은 몇 번이든 방문할 수 있으며, 검정 칸은 절대 방문할 수 없다. 마지막 유채색 칸을 방문하면 정육면체는 사라진다. 유채색 칸을 방문해야 하는 순서는 이동을 시작하기 전에 이미 알려져 있다.

그 순서가 주어질 때, 정육면체가 여섯 유채색 칸을 그 순서대로 모두 방문하는 데 필요한 최소 걸음 수를 구하라.

입력

입력은 여러 개의 데이터셋으로 이루어진다. 각 데이터셋의 형식은 다음과 같다.

w d
c(1,1) ... c(w,1)
...
c(1,d) ... c(w,d)
v1v2v3v4v5v6

첫째 줄에는 두 양의 정수 ww와 dd가 공백으로 구분되어 주어진다. 다음 dd개의 줄에는 공백 없이 ww개의 문자로 이루어진 문자열이 주어진다. 각 문자 c(i,j)c(i,j)는 r, g, b, c, m, y, w, k(빨강, 초록, 파랑, 청록, 자홍, 노랑, 흰색, 검정) 중 하나이거나 기호 #이다. r, g, b, c, m, y와 #은 각 데이터셋에서 정확히 한 번씩만 나타난다. 마지막 줄은 여섯 글자짜리 문자열 v1v2v3v4v5v6v_1v_2v_3v_4v_5v_6으로, "rgbcmy"의 순열이다.

ww는 침대의 너비(동서 길이), dd는 깊이(남북 길이)이며 단위는 칸이다. 둘 다 3030을 넘지 않는다. 문자 c(1,1)c(1,1)은 북서쪽 모서리, c(w,1)c(w,1)은 북동쪽, c(1,d)c(1,d)는 남서쪽, c(w,d)c(w,d)는 남동쪽 칸에 해당한다. 문자가 글자이면 그 칸의 색을 나타내고, #이면 그 칸은 흰색이며 정육면체의 시작 위치이다.

문자열 v1…v6v_1 \ldots v_6은 방문할 색의 순서를 나타낸다. 정육면체는 v1,v2,…,v6v_1, v_2, \ldots, v_6 색의 칸을 이 순서대로 방문해야 한다.

공백으로 구분된 두 개의 00이 있는 줄이 입력의 끝을 나타낸다.

출력

각 데이터셋에 대해, 최소 걸음 수를 한 줄에 출력한다. 그런 이동이 불가능하면 unreachable을 출력한다.

예제1

  1. 예제 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
    
    예상 출력
    9
    49
    unreachable