스테인드글라스

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

문제

데일은 여러 개의 불규칙한 색유리 조각으로 이루어진 정교한 스테인드글라스 창을 복원하고 있었다. 그는 창을 조심스럽게 해체하고, 색이 바랜 조각들은 본래의 선명한 빛깔을 되살리도록 처리한 뒤, 창을 다시 맞추는 작업을 상당히 진행했다. 그러나 밤이 되어 조명이 어두워지자 작업을 멈출 수밖에 없었다.

다음 날 아침 돌아와 보니, 호의로 청소를 하던 관리인이 원래 창의 도면과 사진을 모두 버린 뒤였다. 이제 그는 남은 구멍에 조각들을 어떻게 맞춰 넣어야 할지 스스로 알아내야 한다. 옛 스테인드글라스를 만들던 기법 때문에 유리는 두께가 균일하지 않고, 항상 가장 두꺼운 모서리가 아래로 가도록 잘라 배치되었다. 따라서 각 조각의 위아래 방향은 고정되어 있어 회전시킬 수 없지만, 앞뒤(좌우) 방향은 알 수 없어 일부 조각은 좌우로 뒤집어야 할 수도 있다.

주어진 모든 조각을 필요하면 좌우로 뒤집고 평행이동만 하여, 서로 겹치지 않게 배치해 구멍의 실루엣을 정확히 빈틈없이 채울 수 있는지 판정하라. 각 조각은 반드시 정확히 한 번씩 모두 사용해야 하며, 조각을 회전하거나 위아래로 뒤집는 것은 허용되지 않는다.

입력

입력은 여러 개의 데이터 집합으로 이루어지며, 왼쪽 끝에 맞춰 쓴 문자열 ***만 있는 줄로 종료된다.

각 데이터 집합은 한 개 이상의 조각 실루엣과 창에 난 구멍의 실루엣으로 이루어진다. 실루엣은 공백과 하나의 특정한 비공백 문자로 그려진 ASCII 그림이다. 공백 문자는 유리가 없는 위치를, 비공백 문자는 유리가 있는 위치(구멍의 실루엣에서는 유리를 채워 넣을 위치)를 나타낸다.

각 실루엣은 1줄에서 8줄로 이루어지고, 각 줄은 1자에서 8자로 이루어지며, 모든 줄에는 비공백 문자가 적어도 하나 있다. 각 실루엣은 서로 다른 줄들의 묶음으로 제시된다.

첫 번째 조각은 문자 A로, 다음 조각은 B로, 그다음은 C로 이어서 그려진다. 조각은 최대 8개이다. 마지막 조각 다음에는 구멍의 실루엣이 문자 #로 그려진다. 한 실루엣에서 다음 실루엣으로 넘어가는 것은 문자가 바뀌는 것으로 알 수 있다. 구멍 실루엣의 끝이자 해당 데이터 집합의 끝은 빈 줄로 표시된다.

출력

각 데이터 집합마다 먼저 =====(등호 5개)로 이루어진 줄을 출력한다. 그다음, 모든 조각을 필요하면 좌우로 뒤집고 평행이동만 하여 서로 겹치지 않게 배치해 구멍의 실루엣을 정확히 빈틈없이 채울 수 있다면(각 조각을 정확히 한 번씩 모두 사용) The window can be repaired.를 출력한다. 그러한 배치가 불가능하다면 The window cannot be repaired.를 출력한다.