만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

오컬트 정사각형

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

요약
소수 P가 주어졌을 때, 값이 0부터 P까지이고 각 수 i가 최대 i번만 나오는 P×P 마법 제곱을 만들거나 불가능하면 -1을 출력합니다.
난이도

보통10점 중 7점

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

문제

마방진은 각 행, 각 열, 두 대각선에 놓인 수의 합이 모두 같은, 음이 아닌 정수의 정사각형 배열이다. N×NN \times N 오컬트 정사각형은 NN개의 행과 NN개의 열을 가진 마방진이며, 다음 조건을 추가로 만족한다.

  • 정사각형의 모든 정수는 0 이상 NN 이하이다.
  • 모든 1≤i≤N1 \le i \le N에 대해 정수 ii는 정사각형에 최대 ii번 나타난다.
  • 정사각형에 서로 다른 양의 정수가 적어도 두 개 있다.

예를 들어 아래는 5 × 5 오컬트 정사각형이며, 각 행, 각 열, 두 대각선의 합이 모두 7이다.

0 0 0 3 4
2 4 0 0 1
0 0 3 4 0
5 0 0 0 2
0 3 4 0 0

주어진 소수 PP에 대해 P×PP \times P 오컬트 정사각형을 만들거나, 그러한 정사각형이 존재하지 않는다고 판단하라.

입력

첫째 줄에 소수 PP가 주어진다(2≤P≤10002 \le P \le 1000). PP는 오컬트 정사각형의 행과 열의 개수이다.

출력

P×PP \times P 오컬트 정사각형이 존재하지 않으면 -1을 한 줄에 출력한다. 그렇지 않으면 PP줄에 걸쳐 각 줄마다 정수 PP개를 출력한다. ii번째 줄의 jj번째 정수는 정사각형의 ii행 jj열에 있는 수이다. 조건을 만족하는 정사각형이라면 어느 것을 출력해도 된다.

예제2

  1. 예제 1

    입력
    5
    
    예상 출력
    0 0 0 3 4
    2 4 0 0 1
    0 0 3 4 0
    5 0 0 0 2
    0 3 4 0 0
    
  2. 예제 2

    입력
    2
    
    예상 출력
    -1