루비크 큐브
시간 제한1초메모리 제한128 MB
펼친 시작 상태에서 루빅스 큐브 면을 회전하는 명령을 시뮬레이션하고, 마지막 면 조각 색을 같은 배치로 출력한다.
문제
오래된 루비크 큐브를 발견하고, 큐브의 상태를 기록하고 돌리는 동작을 시뮬레이션하는 프로그램을 작성하려고 한다.
루비크 큐브는 페이슬릿(facelet) 이라고 부르는 54개의 작은 정사각형 면으로 덮여 있으며, 여섯 면 각각에 9개씩 있다. 각 페이슬릿은 하나의 색을 가진다. 큐브가 맞춰진 상태일 때는 한 면의 아홉 페이슬릿이 모두 같은 색을 갖는다. 원래 큐브의 여섯 색은 빨강, 노랑, 초록, 파랑, 흰색, 주황이다.

그림 1: 앞면을 돌리는 모습.
큐브의 면을 돌려 페이슬릿의 위치를 바꿀 수 있다. 한 면을 돌리면 9개의 작은 큐브가 붙은 페이슬릿과 함께 새로운 위치로 이동한다(그림 1 참고).
시작 상태와 돌릴 면들의 목록이 주어질 때, 모든 회전을 마친 뒤의 각 페이슬릿 색을 구한다.
입력
첫 줄에는 시나리오의 개수가 주어진다. 각 시나리오는 두 부분으로 이루어진다. 먼저 큐브의 시작 상태가, 그다음 수행할 회전이 이어진다.
시작 상태. 색은 한 글자로 표현되며(페이슬릿 하나당 한 글자, 공백 하나로 구분), 큐브를 펼친 전개도 모양으로 배치된다(그림 2 참고). 위에서 아래로:
- 윗면을 나타내는 세 줄. 앞면 바로 위에 오도록 각 줄을 공백 6칸 들여쓴다.
- 왼면, 앞면, 오른면, 뒷면을 이어 나열한 세 줄. 각 면의 행을 공백 하나로 구분해 이어 붙이면 한 줄당 12개의 글자가 된다.
- 아랫면을 나타내는 세 줄. 윗면과 마찬가지로 들여쓴다.

그림 2: 입력과 출력에 사용하는 전개도 모양.
회전. 이 부분은 회전 횟수 ()가 적힌 줄로 시작한다. 이어지는 개의 줄에는 공백 하나로 구분된 두 정수 와 가 있다. 는 돌릴 면을 선택하며, 왼면 , 앞면 , 오른면 , 뒷면 , 윗면 , 아랫면 로 번호를 매긴다. 는 방향으로, 해당 면 를 정면으로 바라보는 사람을 기준으로 은 시계 방향, 은 반시계 방향을 뜻한다.
출력
각 시나리오마다 Scenario #i: 줄을 출력한다. 여기서 는 부터 시작하는 시나리오 번호이다. 그 다음에 입력과 똑같은 배치로 회전을 모두 수행한 뒤의 큐브 상태를 출력한다. 연속된 두 시나리오 사이에는 빈 줄 하나를 넣어 구분한다.