Minecraft

시간 제한1.52초메모리 제한1024 MB

요약
3차원 0/1 격자의 세 방향 투영이 주어졌을 때 이를 만족하는 3차원 격자를 구성하거나 불가능함을 판별합니다.
난이도

보통10점 중 6점

유형
행렬, 그리디, 구현
정답자
아직 제출이 없습니다

문제

2009년에 출시된 게임 Minecraft를 떠올리며 다음 문제를 생각해 보자.

n×n×nn \times n \times n 크기의 3차원 격자 MM이 있다. ii번째 층, jj번째 행, kk번째 열의 칸을 Mi,j,kM_{i,j,k}라고 하자. 각 칸에는 블록이 최대 하나 있으며, 블록이 있으면 Mi,j,k=1M_{i,j,k}=1, 없으면 Mi,j,k=0M_{i,j,k}=0이다.

격자를 세 축 방향으로 사영해 얻은 n×nn \times n 크기의 2차원 격자를 각각 HH, RR, CC라고 한다. 각 격자는 다음과 같이 정의된다.

  • 어떤 층 ii에 대해 Mi,j,k=1M_{i,j,k}=1이면 Hj,k=1H_{j,k}=1이고, 그런 층이 없으면 Hj,k=0H_{j,k}=0이다.
  • 어떤 행 jj에 대해 Mi,j,k=1M_{i,j,k}=1이면 Ri,k=1R_{i,k}=1이고, 그런 행이 없으면 Ri,k=0R_{i,k}=0이다.
  • 어떤 열 kk에 대해 Mi,j,k=1M_{i,j,k}=1이면 Ci,j=1C_{i,j}=1이고, 그런 열이 없으면 Ci,j=0C_{i,j}=0이다.

세 격자 H′H', R′R', C′C'가 주어진다. 사영 결과가 각각 H=H′H=H', R=R′R=R', C=C′C=C'가 되는 3차원 격자 M′M'가 존재하는지 판별하라.

입력

첫째 줄에 격자의 한 변의 크기 nn이 주어진다. (1≤n≤1001 \le n \le 100)

다음 nn개의 줄에는 격자 H′H'가 주어진다. 각 줄은 0과 1로 이루어진 길이 nn의 문자열이며, 이 중 jj번째 줄의 kk번째 문자가 Hj,k′H'_{j,k}이다.

그다음 nn개의 줄에는 격자 R′R'가 주어진다. 각 줄은 0과 1로 이루어진 길이 nn의 문자열이며, 이 중 ii번째 줄의 kk번째 문자가 Ri,k′R'_{i,k}이다.

마지막 nn개의 줄에는 격자 C′C'가 주어진다. 각 줄은 0과 1로 이루어진 길이 nn의 문자열이며, 이 중 ii번째 줄의 jj번째 문자가 Ci,j′C'_{i,j}이다.

출력

조건을 만족하는 격자 M′M'가 존재한다면 첫째 줄에 YES를 출력한다.

그다음 줄부터 n×nn \times n 격자를 모두 nn개 출력한다. 각 격자는 nn개의 줄로 출력하며, 각 줄은 0과 1로 이루어진 길이 nn의 문자열이어야 한다. ii번째로 출력하는 격자의 jj번째 줄 kk번째 문자는 Mi,j,k′M'_{i,j,k}에 해당한다.

가능한 격자가 여러 개라면 그중 아무거나 하나만 출력한다.

조건을 만족하는 격자 M′M'가 존재하지 않는다면 첫째 줄에 NO를 출력한다.

예제2

  1. 예제 1

    입력
    5
    11111
    10000
    10000
    10000
    11111
    11111
    10000
    10000
    10000
    11111
    11111
    10000
    10000
    10000
    11111
    
    예상 출력
    YES
    11111
    10000
    10000
    10000
    11111
    10000
    00000
    00000
    00000
    00000
    10000
    00000
    00000
    00000
    00000
    10000
    00000
    00000
    00000
    00000
    11111
    10000
    10000
    10000
    11111
    
  2. 예제 2

    입력
    4
    0111
    0001
    1100
    1101
    1010
    0111
    0010
    0101
    1101
    1111
    0111
    1101
    
    예상 출력
    NO