서로소 스도쿠

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

요약
N^2 x N^2 크기 격자의 빈칸을 채워 같은 행, 열, 블록에 있는 두 수가 모두 서로소가 되도록 만든다.
난이도

어려움10점 중 8점

유형
정수론, 그리디, 구현, 완전 탐색
정답자
아직 제출이 없습니다

문제

위 그림은 32×323^2 \times 3^2 서로소 스도쿠의 예시이다.

서로소 스도쿠는 스도쿠의 변형으로 간단한 숫자 퍼즐이다. 서로소 스도쿠는 N2×N2N^2 \times N^2 크기의 보드에서 진행되며 각 칸에는 정수 하나를 쓸 수 있다. 이 보드를 N×NN \times N 크기의 정사각 부분으로 나눈 N2N^2개의 영역들을 '블록'이라고 한다. 서로소 스도쿠의 목표는 다음 규칙을 만족하도록 빈칸에 수를 작성하는 것이다.

  • 모든 수는 22 이상 1,000,0001\\,000\\,000 이하의 정수이다.
  • 한 행에서 서로 다른 두 위치에 적힌 두 수 x_1,x_2x\_1, x\_2는 서로소이다. 즉 gcd⁡(x_1,x_2)=1\gcd(x\_1, x\_2) = 1이다.
  • 한 열에서 서로 다른 두 위치에 적힌 두 수 x_1,x_2x\_1, x\_2는 서로소이다. 즉 gcd⁡(x_1,x_2)=1\gcd(x\_1, x\_2) = 1이다.
  • 한 블록에서 서로 다른 두 위치에 적힌 두 수 x_1,x_2x\_1, x\_2는 서로소이다. 즉 gcd⁡(x_1,x_2)=1\gcd(x\_1, x\_2) = 1이다.

일부 칸이 작성된 서로소 스도쿠를 입력받았을 때, 규칙에 맞게 모든 빈칸에 수를 채우는 프로그램을 작성하시오.

입력

첫 번째 줄에 NN이 주어진다. (2≤N≤10)(2 \le N \le 10)

두 번째 줄부터 N2N^2개의 줄에 걸쳐 서로소 스도쿠 보드가 주어진다. 그중 ii번째 줄에는 N2N^2개의 정수가 공백으로 구분되어 주어진다. 이 중 jj번째 수 a_ija\_{ij}는 ii번째 행 jj번째 열에 있는 수를 의미한다. a_ija\_{ij}가 00인 경우는 ii번째 행 jj번째 열이 빈칸임을 의미한다. (0≤a_ij≤1,000,000;(0 \le a\_{ij} \le 1\\,000\\,000; a_ij≠1)a\_{ij} \neq 1)

입력으로 주어지는 서로소 스도쿠는 항상 규칙을 만족하며 빈칸이 항상 11개 이상이다. 모든 빈칸을 채울 수 없는 경우의 입력은 주어지지 않는다.

출력

N2N^2개의 줄에 걸쳐 모든 빈칸을 채운 서로소 스도쿠를 출력한다. 그중 ii번째 줄에는 N2N^2개의 정수를 공백으로 구분하여 출력한다. 이 중 jj번째 수 b_ijb\_{ij}는 ii번째 행 jj번째 열에 있는 수를 의미한다. (2≤b_ij≤1,000,000)(2 \le b\_{ij} \le 1\\,000\\,000)

서로소 스도쿠의 모든 칸을 채우는 방법이 여럿인 경우는 그중 아무거나 하나를 출력한다.

예제1

  1. 예제 1

    입력
    2
    4 0 5 0
    0 0 0 0
    0 0 0 0
    0 2 0 3
    
    예상 출력
    4 77 5 13
    15 13 8 11
    49 9 13 10
    13 2 7 3