Minecraft

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

문제

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

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

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

  • 어떤 층 $i$에 대해 $M_{i,j,k}=1$이면 $H_{j,k}=1$이고, 그런 층이 없으면 $H_{j,k}=0$이다.
  • 어떤 행 $j$에 대해 $M_{i,j,k}=1$이면 $R_{i,k}=1$이고, 그런 행이 없으면 $R_{i,k}=0$이다.
  • 어떤 열 $k$에 대해 $M_{i,j,k}=1$이면 $C_{i,j}=1$이고, 그런 열이 없으면 $C_{i,j}=0$이다.

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

입력

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

다음 $n$개의 줄에는 격자 $H'$가 주어진다. 각 줄은 01로 이루어진 길이 $n$의 문자열이며, 이 중 $j$번째 줄의 $k$번째 문자가 $H'_{j,k}$이다.

그다음 $n$개의 줄에는 격자 $R'$가 주어진다. 각 줄은 01로 이루어진 길이 $n$의 문자열이며, 이 중 $i$번째 줄의 $k$번째 문자가 $R'_{i,k}$이다.

마지막 $n$개의 줄에는 격자 $C'$가 주어진다. 각 줄은 01로 이루어진 길이 $n$의 문자열이며, 이 중 $i$번째 줄의 $j$번째 문자가 $C'_{i,j}$이다.

출력

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

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

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

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