시간 제한
메모리 제한
시간 제한
1.52초
메모리 제한
1024 MB
2009년에 출시된 게임 Minecraft를 떠올리며 다음 문제를 생각해 보자.
n×n×n 크기의 3차원 격자 M이 있다. i번째 층, j번째 행, k번째 열의 칸을 Mi,j,k라고 하자. 각 칸에는 블록이 최대 하나 있으며, 블록이 있으면 Mi,j,k=1, 없으면 Mi,j,k=0이다.
격자를 세 축 방향으로 사영해 얻은 n×n 크기의 2차원 격자를 각각 H, R, C라고 한다. 각 격자는 다음과 같이 정의된다.
세 격자 H′, R′, C′가 주어진다. 사영 결과가 각각 H=H′, R=R′, C=C′가 되는 3차원 격자 M′가 존재하는지 판별하라.
첫째 줄에 격자의 한 변의 크기 n이 주어진다. (1≤n≤100)
다음 n개의 줄에는 격자 H′가 주어진다. 각 줄은 0과 1로 이루어진 길이 n의 문자열이며, 이 중 j번째 줄의 k번째 문자가 Hj,k′이다.
그다음 n개의 줄에는 격자 R′가 주어진다. 각 줄은 0과 1로 이루어진 길이 n의 문자열이며, 이 중 i번째 줄의 k번째 문자가 Ri,k′이다.
마지막 n개의 줄에는 격자 C′가 주어진다. 각 줄은 0과 1로 이루어진 길이 n의 문자열이며, 이 중 i번째 줄의 j번째 문자가 Ci,j′이다.
조건을 만족하는 격자 M′가 존재한다면 첫째 줄에 YES를 출력한다.
그다음 줄부터 n×n 격자를 모두 n개 출력한다. 각 격자는 n개의 줄로 출력하며, 각 줄은 0과 1로 이루어진 길이 n의 문자열이어야 한다. i번째로 출력하는 격자의 j번째 줄 k번째 문자는 Mi,j,k′에 해당한다.
가능한 격자가 여러 개라면 그중 아무거나 하나만 출력한다.
조건을 만족하는 격자 M′가 존재하지 않는다면 첫째 줄에 NO를 출력한다.