3차원 막대 미로
시간 제한1초메모리 제한128 MB
정육면체의 여섯 면이 각각 2차원 미로일 때, 마커가 반대편 내부 모서리까지 가는 최단 이동 순서를 사전순으로 가장 앞서게 구한다.
문제
3차원 미로는 속이 빈 정육면체로 만듭니다. 정육면체는 정수 좌표를 쓰며, 한 꼭짓점 에서 반대쪽 꼭짓점 까지의 영역을 차지합니다. 정육면체의 여섯 면에는 각각 2차원 미로가 있습니다. 각 면은 격자이고, 칸은 벽(X)이거나 열린 칸(빈칸)입니다. 모든 면의 테두리 칸은 항상 벽이므로, 열린 칸은 각 면 내부의 무늬를 이룹니다.
정육면체 안에는 표식 하나와 막대 여섯 개가 있습니다. 각 막대는 표식에서 출발해 정육면체의 한 면을 곧장 뚫고 나갑니다. 막대가 어떤 면을 지날 때, 그 면과 평행한 표식의 두 좌표가 가리키는 한 칸으로 나옵니다. 여섯 개의 출구 칸이 모두 열려 있을 때에만 표식은 그 격자점에 있을 수 있으며, 막대 중 하나라도 벽 칸에 닿으면 그 위치는 막혀 있습니다.
표식은 에서 시작해 에 도착해야 합니다. 한 번 움직일 때마다 전체 구조가 한 축을 따라 한 칸씩 미끄러집니다. 여섯 가지 이동은 각각 F(Forward, 앞), B(Back, 뒤), L(Left, 왼쪽), R(Right, 오른쪽), U(Up, 위), D(Down, 아래)로 표기합니다. 표식의 위치를 ()라 하면:
B는 를 1 늘리고,F는 를 1 줄입니다.L은 를 1 늘리고,R은 를 1 줄입니다.U는 를 1 늘리고,D는 를 1 줄입니다.
이동은 도착 위치가 정육면체 안에 있고 막혀 있지 않을 때에만 허용됩니다. 에서 까지 표식을 옮기는 가장 짧은 이동 순서를 구하세요.
입력
입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스는 정수 ()이 적힌 줄로 시작합니다. 이어지는 개의 줄은 여섯 면을 차례대로 설명하며, 각 면은 정확히 개의 문자로 이루어진 개의 줄로 주어집니다(각 문자는 벽을 뜻하는 X 또는 열린 칸을 뜻하는 빈칸입니다).
면은 다음의 고정된 순서와 방향으로 주어집니다.
- 앞면 Forward — 윗면과 맞닿은 모서리가 위쪽, 오른쪽면과 맞닿은 모서리가 오른쪽에 오도록 배치.
- 오른쪽면 Right — 윗면 모서리가 위쪽, 뒷면 모서리가 오른쪽.
- 뒷면 Back — 윗면 모서리가 위쪽, 왼쪽면 모서리가 오른쪽.
- 왼쪽면 Left — 윗면 모서리가 위쪽, 앞면 모서리가 오른쪽.
- 윗면 Up — 뒷면 모서리가 위쪽, 왼쪽면 모서리가 오른쪽.
- 아랫면 Down — 뒷면 모서리가 위쪽, 왼쪽면 모서리가 오른쪽.
같은 내용을 좌표로 나타내면, 이고 표식의 위치가 일 때 각 면을 지나는 막대는 그 면의 아래 표에 있는 (0부터 세는) 행과 열로 나옵니다. 이 여섯 칸 중 하나라도 벽이면 그 위치는 막혀 있습니다.
테스트 케이스 목록은 0 하나만 있는 줄로 끝나며, 이 줄은 테스트 케이스가 아닙니다.
출력
각 테스트 케이스마다 한 줄을 출력합니다. 표식을 에서 로 옮기는, 길이가 가장 짧은 이동 순서를 출력하세요. 순서의 각 문자는 F, B, L, R, U, D 중 하나입니다. 가장 짧은 순서가 여러 개이면 순서에서 사전순으로 가장 앞선 것을 출력합니다. 모든 테스트 케이스에는 적어도 하나의 해가 존재함이 보장됩니다.