블랙박스
시간 제한2초메모리 제한1024 MB
8x8 상자 안 6x6 영역에 원자 5개를 배치해 레이저 입출구 실험 결과를 재현하는 배치를 모두 찾고, 유일할 때만 격자를 출력한다.
문제

물리학자들이 "블랙박스" 안에 숨어 있는 원자의 위치를 알아내려고 합니다. 상자 경계의 출입구로 레이저 빔을 쏜 뒤, 각 빔이 어느 출입구로 빠져나오는지(또는 흡수되어 나오지 않는지)를 기록합니다. 이 실험 기록으로부터 원자의 위치를 복원하는 것이 목표입니다.
상자는 크기의 평면 격자이며 입니다. 상자 안에는 정확히 개의 원자가 숨어 있습니다. "테두리 금지" 규칙에 따라 원자는 가운데의 개 칸(안쪽 영역)에만 놓일 수 있고, 두 원자가 같은 칸을 차지할 수는 없습니다.
경계에는 개의 출입구가 있으며 번부터 번까지 번호가 매겨져 있습니다. 번호는 왼쪽 위 모서리에서 시작해 반시계 방향으로 붙습니다.
- –번: 왼쪽 변, 위에서 아래로. 빔은 동쪽으로 들어갑니다.
- –번: 아래쪽 변, 왼쪽에서 오른쪽으로. 빔은 북쪽으로 들어갑니다.
- –번: 오른쪽 변, 아래에서 위로. 빔은 서쪽으로 들어갑니다.
- –번: 위쪽 변, 오른쪽에서 왼쪽으로. 빔은 남쪽으로 들어갑니다.
빔은 직선으로 나아가며 다음 규칙을 따릅니다.
- 앞에 아무 장애물이 없으면 직진합니다.
- 원자가 있는 칸으로 들어가려 하면 그 빔은 흡수되어 상자 밖으로 나오지 않습니다.
- 굴절: 어떤 칸에 들어가기 직전에, 그 칸의 (빔 진행 방향 기준) 왼쪽 이웃 칸에 원자가 있으면 빔은 오른쪽으로 꺾이고, 오른쪽 이웃 칸에 원자가 있으면 왼쪽으로 꺾입니다. 여기서 왼쪽·오른쪽은 빔이 현재 나아가는 방향을 기준으로 합니다.
- 흡수는 굴절보다 우선합니다. 바로 앞 칸에 원자가 있으면, 이웃 원자에 의해 굴절될 상황이더라도 빔은 흡수됩니다.
- 앞 칸 때문에 빔이 왼쪽과 오른쪽으로 동시에 꺾여야 한다면, 빔은 진행 방향을 반대로 돌려 되돌아갑니다.
- 이 규칙들은 함께 적용되므로, 빔은 상자를 빠져나가거나 흡수되기 전까지 여러 번 꺾일 수 있습니다.
입력
첫 줄에는 실험의 개수를 나타내는 정수 ()가 주어집니다. 이어지는 개의 줄에는 각각 두 정수 와 가 주어집니다. 는 빔이 상자로 들어간 출입구 번호이고, 는 빔이 빠져나온 출입구 번호이거나, 빔이 흡수된 경우 입니다.
출력
실험 결과로 원자의 위치가 유일하게 결정되면, 상자를 줄에 걸쳐 각 줄 개의 문자로 출력합니다. 원자가 있는 칸은 +, 빈 칸은 -로 나타냅니다. 그렇지 않으면 한 줄에 NO를 출력합니다. 실험이 모순되거나(모든 실험을 만족하는 원자 배치가 존재하지 않음) 결정적이지 않은(조건을 만족하는 서로 다른 배치가 여럿 존재함) 경우 모두 NO가 정답입니다.