Lego Land
시간 제한2초메모리 제한512 MB
N x N x N 정육면체 도시의 위에서 본 높이 행렬이 주어질 때, X, Y, Z축을 중심으로 한 90도 회전 명령들을 적용한 뒤 최종 투영 뷰를 출력한다.
문제

그림 1: Lego 시내의 VR 뷰
Lego 도시 공학자라면 경쟁자보다 앞서기 위해 가능한 모든 기술적 이점을 확보하는 것이 중요하다. 최근 인간 공학자들 사이에서 가상 현실 기술이 인기를 끄는 것을 보고, 투자자들의 마음을 사로잡을 비슷한 무언가를 갖고 싶어졌다. 다행히 Lego 시내의 VR 뷰는 아주 단순하다. 첫째, 건물만 보여 주면 되고, 짓고 싶은 모든 건물의 높이와 위치는 이미 알고 있다. 둘째, Lego VR은 도시의 정육면체 구역을 보여 주는 기능만 있다. 정육면체를 그 면 중 하나를 포함하는 평면에 투영하는 방식이다. Lego 공학자는 정육면체 도시 구역을 중심을 지나는 X, Y, Z축 중 하나를 기준으로 한 번에 90도씩 회전시켜 뷰를 살펴볼 수 있다.
Lego VR 프로그램을 작성하라. 입력으로 시내 구역의 N × N 행렬 뷰와 일련의 회전 명령이 주어지면, 회전한 시점에서 같은 시내 구역을 나타내는 N × N 행렬 뷰를 출력해야 한다. N × N 입력 행렬은 N × N × N Lego 시내 정육면체(정육면체의 한 면이 지면에 있음)의 위에서 본 뷰를 나타낸다.
입력 행렬의 각 숫자는 해당 위치에 있는 건물의 높이를 나타낸다. 예를 들어 0은 건물이 없음을, 3은 3층(Lego 3개) 높이의 건물을 나타낸다. 처음의 위에서 본 뷰에는 가려진 빈 공간이 없다. 즉 건물은 속이 꽉 차 있다. 또한 뷰에는 건물만 나타나고 지면은 나타나지 않는다. 건물 블록이 없는 뷰의 영역은 값이 0이다.
입력
입력은 세 부분으로 이루어진 입력 집합 여러 개로 구성된다. 집합의 개수는 정해지지 않았으며 적어도 하나이다.
-
격자 크기 — 건물 정육면체의 크기를 나타내는 정수 N (1 ≤ N ≤ 9) 하나가 한 줄에 주어진다.
-
건물 높이 — 0 이상 N 이하의 정수로 이루어진 N × N 배열. 배열의 각 행은 입력 한 줄에 주어지며, 배열 원소 사이에는 구분자가 없다. 이 초기 N × N 배열은 N × N Lego 건물로 꽉 찬 구조물을 위에서 본 뷰이고, 각 숫자는 해당 위치에 있는 건물의 높이를 나타낸다. 높이가 0이면 그 위치에 Lego가 없다는 뜻이다.
-
Lego가 들어 있는 N × N × N 정육면체의 중심을 기준으로 하는 일련의 회전 명령. 다음 중 하나이다.
- “X” — 현재 뷰의 가로축을 기준으로 회전한다. 현재 뷰의 위쪽 면이 앞으로 이동해 새로운 뷰의 면이 되도록 정육면체가 회전한다.
- “Y” — 현재 뷰의 세로축을 기준으로 회전한다. 현재 뷰의 왼쪽 면이 앞으로 이동해 새로운 뷰의 면이 되도록 정육면체가 회전한다.
- “Z” — 현재 뷰의 시선축을 기준으로 회전한다. 뷰의 면은 바뀌지 않지만 반시계 방향으로 90도 회전한다.
- 이 명령들은 최대 80개 문자로 이루어진 하나의 끊기지 않은 문자열이다.
각 입력 집합 사이에는 빈 줄이 정확히 하나 있다. 첫 번째 입력 집합 앞과 마지막 입력 집합 뒤에는 빈 줄이 없다.
잘못된 입력은 주어지지 않는다.
출력
각 입력 집합에 대해, 입력 배열과 그에 딸린 회전 명령들을 적용한 최종 뷰를 나타내는 0 이상 N 이하의 숫자로 이루어진 N × N 배열을 출력한다. 출력 배열 사이에는 빈 줄이 정확히 하나 있어야 하며, 마지막 출력 배열의 마지막 숫자 뒤에는 공백이 없어야 한다. 마찬가지로 첫 번째 출력 배열의 첫 숫자가 출력의 첫 문자여야 한다.
어떤 종류의 불필요한 출력도 하면 안 된다.
이 프로그램은 본질적으로 3차원 물체의 뷰를 만들므로, 이 뷰가 어떻게 계산되는지 아주 구체적으로 설명하는 것이 좋다. 위의 그림을 보면 정육면체에는 여섯 면이 있고 위, 왼쪽, 아래, 오른쪽에 표시가 되어 있다. 앞은 관찰자에게 가장 가까운 면이고, 뒤는 관찰자에게서 가장 먼 면이다. 처음 입력 뷰는 Lego 도시를 위에서 본 것을 나타낸다. 각 숫자는 그 위치에 있는 건물의 높이(또는 그에 대응하여, 해당 행과 열에 있는 Lego 조각의 정육면체 뒤쪽에서부터의 최대 거리)를 나타낸다. 정육면체를 회전하면 뷰가 더 이상 (반드시) 위에서 본 뷰가 아니므로 숫자는 더 이상 건물의 높이를 나타내지 않는다. 대신 숫자는 정육면체의 해당 행과 열에 있는 Lego 조각의 뒤쪽에서부터의 최대 거리를 계속 나타낸다. 즉 숫자는 관찰자에게 가장 가까운 Lego, 따라서 관찰자에게 보이는 Lego를 나타낸다.