회전하는 고리

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

요약
정사각 격자가 주어질 때, 각 동심원 고리를 독립적으로 회전시켜 행 우선 순서로 정렬할 수 있는지 판정한다.
난이도

보통10점 중 5점

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

문제

정사각형 격자는 안쪽으로 겹겹이 들어간 하나 이상의 고리(ring)로 볼 수 있습니다. 예를 들어 그림 (a)처럼 5×55 \times 5 격자는 바깥쪽부터 안쪽으로 1,2,31, 2, 3번이 매겨진 세 개의 고리로 이루어져 있습니다. 크기가 NN인 정사각형 격자가 정렬된(sorted) 상태라는 것은, 그림 (b)의 N=4N = 4 예시처럼 11부터 N2N^2까지의 값이 행 우선(row-major) 순서로 들어 있는 것을 뜻합니다.

주어진 정사각형 격자를 오직 고리 회전만으로 정렬할 수 있는지 판정하려 합니다. 각 고리는 다른 고리와 독립적으로, 시계 방향 또는 반시계 방향으로 원하는 만큼 회전할 수 있습니다. 예를 들어 그림 (c)의 격자는 바깥 고리를 반시계 방향으로 두 칸, 두 번째 고리를 시계 방향으로 한 칸 회전하면 정렬됩니다.

각 격자에 대해 이러한 방식으로 정렬이 가능한지 판정하세요.

입력

입력은 하나 이상의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 격자의 크기를 나타내는 정수 NN이 주어집니다. 이어지는 NN개의 줄에는 각 줄마다 NN개의 정수가 행 우선 순서로 격자 값으로 주어집니다.

0<N≤10000 < N \le 1000 이며, 모든 격자 값은 10610^6 이하의 자연수입니다.

입력의 끝은 N=0N = 0인 줄로 표시되며, 이 줄은 처리하지 않습니다.

출력

각 테스트 케이스마다 다음 형식으로 한 줄을 출력합니다.

k. result

여기서 kk는 테스트 케이스 번호(11부터 시작)이고, 그 뒤에 마침표와 공백 한 칸이 오며, result는 고리 회전만으로 정렬할 수 있으면 YES, 그렇지 않으면 NO입니다.

예제1

  1. 예제 1

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