만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

큐브 표면 퍼즐

시간 제한5초메모리 제한512 MB

요약
주어진 여섯 조각을 접어서 한 변의 길이가 n인 빈 정육면체의 겉면을 채울 수 있는지 판정합니다.
난이도

보통10점 중 7점

유형
백트래킹, 기하, 시뮬레이션
정답자
아직 제출이 없습니다

문제

Hadrian Hex 씨는 큐브 표면 퍼즐을 여러 개 모아 두었다. 어느 날 조각들이 한데 섞였고, 그는 아직 어떤 여섯 조각으로 정육면체를 만들 수 있는지 찾지 못했다. 주어진 조각 집합으로 정육면체를 만들 수 있는지 판단하는 프로그램을 작성하라.

큐브 표면 퍼즐은 여섯 개의 조각으로 표면이 모두 채워진 속이 빈 정육면체를 만드는 문제이다. 각 조각은 격자 모양의 평면 위에 놓인 단위 큐브들로 이루어진다. 한 변의 길이가 nn인 정육면체를 만들 때, 각 단위 큐브는 다음 두 영역 중 하나에 놓인다.

  • 코어(파란색): 한 변의 길이가 n−2n-2인 정사각형 영역이다. 이 영역은 단위 큐브로 빈틈없이 채워진다.
  • 프린지(빨간색): 코어 바깥쪽을 감싸는 너비 1의 테두리 영역이다. 이 영역의 각 칸은 비어 있거나 단위 큐브가 놓여 있다.

각 조각은 단위 큐브들이 면으로 이어져 있다. 조각은 자유롭게 회전할 수 있고, 조각의 양면 중 어느 쪽이든 정육면체의 안쪽이나 바깥쪽이 될 수 있다. 코어 영역의 단위 큐브는 완성된 정육면체 각 면의 중앙에 놓여야 한다.

입력의 첫 번째 데이터셋에 있는 그림 E-1의 여섯 조각으로는 그림 E-2처럼 정육면체를 만들 수 있다.

그림 E-1 입력의 첫 번째 데이터셋에 해당하는 조각

그림 E-2 정육면체를 만드는 모습

입력

입력은 최대 200개의 데이터셋으로 이루어지며, 각 데이터셋은 다음 형식으로 주어진다.

n
x1,1x1,2 … x1,n
x2,1x2,2 … x2,n
…
x6n,1x6n,2 … x6n,n

nn은 홀수이며 3≤n≤93 \le n \le 9이다. 이어서 여섯 개의 조각이 주어지고, 각 조각은 nn줄로 표현되어 전체 6n6n줄이다. 각 줄은 격자의 한 행에 해당한다. 'X'는 해당 칸에 단위 큐브가 있다는 뜻이고, '.'은 비어 있다는 뜻이다. 각 조각의 코어 영역은 그 조각 데이터의 가운데에 위치한다. 입력의 끝은 0만 적힌 줄로 표시된다.

출력

각 데이터셋에 대해, 주어진 조각으로 정육면체를 만들 수 있으면 Yes를, 만들 수 없으면 No를 출력한다.

예제1

  1. 예제 1

    입력
    5
    ..XX.
    .XXX.
    XXXXX
    XXXXX
    X....
    ....X
    XXXXX
    .XXX.
    .XXX.
    .....
    ..XXX
    XXXX.
    .XXXX
    .XXXX
    ...X.
    ...X.
    .XXXX
    XXXX.
    XXXX.
    .X.X.
    XXX.X
    .XXXX
    XXXXX
    .XXXX
    .XXXX
    XX...
    .XXXX
    XXXXX
    XXXXX
    XX...
    5
    ..XX.
    .XXX.
    XXXXX
    XXXX.
    X....
    ....X
    XXXXX
    .XXX.
    .XXX.
    .....
    .XXXX
    XXXX.
    .XXXX
    .XXXX
    ...X.
    ...X.
    .XXXX
    XXXX.
    XXXX.
    .X.X.
    XXX.X
    .XXXX
    XXXXX
    .XXXX
    .XXXX
    XX...
    XXXXX
    XXXXX
    .XXXX
    XX...
    0
    
    예상 출력
    Yes
    No