퍼즐

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

요약
n x n 순열 판이 주어질 때, 행과 열의 순환 이동만으로 각 칸 (i,j)에 (i-1)*n+j가 놓인 목표 상태로 만들 수 있는지 판정한다.
난이도

보통10점 중 7점

유형
수학, 구현, 행렬, 시뮬레이션
정답자
아직 제출이 없습니다

문제

바이트랜드(Byteland)의 왕이 선물로 조각 퍼즐을 받았다. 퍼즐은 n×nn \times n 크기의 판으로 이루어져 있다. ii번째 행, jj번째 열(1≤i,j≤n1 \le i, j \le n)의 칸은 좌표 (i,j)(i, j)를 가지며, 번호 p(i,j)p(i, j)인 조각이 놓여 있다(1≤p(i,j)≤n21 \le p(i, j) \le n^2). 11부터 n2n^2까지의 각 번호는 정확히 한 조각에만 적혀 있다.

칸의 좌표

모든 1≤i,j≤n1 \le i, j \le n에 대해 칸 (i,j)(i, j)에 번호 j+(i−1)×nj + (i - 1) \times n인 조각이 놓이면 퍼즐이 완성된다.

다음 두 가지 이동만 허용된다.

  • 행 이동: 한 행의 모든 조각을 원하는 칸 수만큼 오른쪽으로 순환 이동한다.
  • 열 이동: 한 열의 모든 조각을 원하는 칸 수만큼 아래쪽으로 순환 이동한다.

정확히는, kk번째 행을 오른쪽으로 ll칸(1≤l≤n−11 \le l \le n-1) 순환 이동하면 판은 다음과 같이 바뀐다. p′(i,j)={p(i, j+n−l)i=k, j≤lp(i, j−l)i=k, j>lp(i,j)i≠kp'(i,j) = \begin{cases} p(i,\, j+n-l) & i = k,\ j \le l \\ p(i,\, j-l) & i = k,\ j > l \\ p(i,j) & i \ne k \end{cases} 열을 아래로 ll칸 순환 이동하는 것도 같은 방식으로 정의되며, 조각을 더 큰 행 번호 쪽으로 옮긴다.

왕은 자신의 퍼즐을 풀었지만, 애초에 어떤 처음 배치가 완성 가능한지 궁금해한다. 주어진 배치가 위의 이동만으로 완성될 수 있는지 판정하여라.

입력

첫째 줄에 판 한 변의 길이인 정수 nn이 주어진다(2≤n≤2002 \le n \le 200). 이어지는 nn개의 줄에 처음 배치가 주어진다. i+1i+1번째 줄에는 p(i,1),p(i,2),…,p(i,n)p(i, 1), p(i, 2), \ldots, p(i, n)이 공백 하나로 구분되어 주어진다. 이 값들은 1…n21 \ldots n^2의 순열이다.

출력

배치를 완성할 수 있으면 YES를, 완성할 수 없으면 NO를 한 줄에 출력한다.

힌트

아래 그림처럼 행 이동과 열 이동을 연달아 적용하면 한 배치를 다른 배치로 바꿀 수 있다.

예제3

  1. 예제 1

    입력
    4
    4 6 2 3
    5 10 7 8
    9 14 11 12
    13 1 15 16
    
    예상 출력
    YES
    
  2. 예제 2

    입력
    2
    1 2
    3 4
    
    예상 출력
    YES
    
  3. 예제 3

    입력
    3
    2 1 3
    4 5 6
    7 8 9
    
    예상 출력
    NO