루빅스 큐브 솔버
시간 제한1초메모리 제한128 MB
펼쳐진 큐브 배치에 주어진 면 회전을 적용해 여섯 면이 단색이 되는지 판정합니다.
문제
루빅스 큐브는 1974년 Ernő Rubik이 발명한 입체 퍼즐로, 작은 정육면체 26개로 이루어져 있다. 작은 정육면체마다 겉으로 드러난 면이 1개에서 3개까지 있고, 드러난 면은 모두 54개다. 드러난 면에는 여섯 가지 색 중 하나가 칠해져 있으며, 한 색이 정확히 아홉 면을 덮는다. 큐브는 아무 면이나 90도 돌려서 조작한다. 여섯 면이 각각 한 가지 색으로만 덮이면 큐브가 맞춰진 것이다.
당신은 루빅 대학교의 연구원이고, 어떤 초기 상태에서든 가장 적은 횟수로 큐브를 맞추는 알고리즘을 연구한다. 이 연구에는 큐브 배치를 읽어 조작을 수행하고 그 결과가 맞춰진 상태인지 판정하는 프로그램이 필요하다.
입력
입력은 큐브의 시작 배치 하나와 그 배치에 수행할 조작 하나 이상으로 이루어진다.
배치는 다음과 같은 아홉 줄이다.
G W O
G R R
G B R
B R B R G Y W W W Y G O
G W B O G B Y B O W Y O
W R Y O Y B R Y R G O O
B R Y
B O W
G Y W
이 아홉 줄은 아래 전개도를 따른다.

격자의 각 문자는 겉으로 드러난 면 하나의 색이다. 같은 줄의 문자 사이에는 공백이 하나씩 있고, 줄의 첫 문자 앞에는 공백이 여러 개 올 수 있다. 격자는 큐브를 펼쳐 평면에 늘어놓은 모습이고, 문자 9개(3 × 3 배열)가 큐브의 한 면이다. 처음 세 줄은 큐브의 윗면이다. 다음 세 줄은 왼쪽면, 앞면, 오른쪽면, 뒷면을 이 순서로 담는다. 마지막 세 줄은 아랫면이다.
배치 다음에는 조작이 한 줄에 하나씩, 하나 이상 주어진다. 조작은 모두 12가지이고, 각각 작은 정육면체 9개로 이루어진 면 하나를 90도 돌린다. 한 번 돌릴 때마다 색이 칠해진 정사각형 20개가 움직인다. 돌아가는 면의 8개와 그 면을 이루는 작은 정육면체의 옆면 12개다. 12가지 조작과 수행 방법은 아래 표에 있다.
입력은 데이터 집합 1개 이상 100개 이하로 이루어지고, 데이터 집합 사이에 빈 줄은 없다. 데이터 집합 하나는 다음 네 부분으로 이루어진다.
- 시작 줄.
START한 줄이다. - 큐브의 시작 배치. 모두 9줄이다.
- 조작. 한 줄에 하나씩 하나 이상 주어진다.
- 끝 줄.
END한 줄이다.
마지막 데이터 집합 다음에는 ENDOFINPUT 한 줄이 온다.
출력
데이터 집합마다 정확히 한 줄을 출력한다. 큐브가 맞춰졌으면 Yes를, 맞춰지지 않았으면 No를 출력한다.