Minecraft
시간 제한1.52초메모리 제한1024 MB
3차원 0/1 격자의 세 방향 투영이 주어졌을 때 이를 만족하는 3차원 격자를 구성하거나 불가능함을 판별합니다.
문제
2009년에 출시된 게임 Minecraft를 떠올리며 다음 문제를 생각해 보자.
크기의 3차원 격자 이 있다. 번째 층, 번째 행, 번째 열의 칸을 라고 하자. 각 칸에는 블록이 최대 하나 있으며, 블록이 있으면 , 없으면 이다.
격자를 세 축 방향으로 사영해 얻은 크기의 2차원 격자를 각각 , , 라고 한다. 각 격자는 다음과 같이 정의된다.
- 어떤 층 에 대해 이면 이고, 그런 층이 없으면 이다.
- 어떤 행 에 대해 이면 이고, 그런 행이 없으면 이다.
- 어떤 열 에 대해 이면 이고, 그런 열이 없으면 이다.
세 격자 , , 가 주어진다. 사영 결과가 각각 , , 가 되는 3차원 격자 가 존재하는지 판별하라.
입력
첫째 줄에 격자의 한 변의 크기 이 주어진다. ()
다음 개의 줄에는 격자 가 주어진다. 각 줄은 0과 1로 이루어진 길이 의 문자열이며, 이 중 번째 줄의 번째 문자가 이다.
그다음 개의 줄에는 격자 가 주어진다. 각 줄은 0과 1로 이루어진 길이 의 문자열이며, 이 중 번째 줄의 번째 문자가 이다.
마지막 개의 줄에는 격자 가 주어진다. 각 줄은 0과 1로 이루어진 길이 의 문자열이며, 이 중 번째 줄의 번째 문자가 이다.
출력
조건을 만족하는 격자 가 존재한다면 첫째 줄에 YES를 출력한다.
그다음 줄부터 격자를 모두 개 출력한다. 각 격자는 개의 줄로 출력하며, 각 줄은 0과 1로 이루어진 길이 의 문자열이어야 한다. 번째로 출력하는 격자의 번째 줄 번째 문자는 에 해당한다.
가능한 격자가 여러 개라면 그중 아무거나 하나만 출력한다.
조건을 만족하는 격자 가 존재하지 않는다면 첫째 줄에 NO를 출력한다.