마방진 만들기

NYPC 2025 · 본선

마방진N×NN \times N 크기의 정사각형 칸에 N×NN \times N개의 수를 한 칸에 하나씩 배열하여, 가로, 세로, 가장 긴 두 대각선 방향의 합이 모두 같게 만든 것이다. 예를 들어, 아래 그림은 3×33 \times 3 크기의 마방진의 예시를 보여준다.

N×NN \times N개의 수들이 주어질 때, 이 수들을 한 번씩 사용하여 만들 수 있는 N×NN \times N 크기의 서로 다른 마방진은 모두 몇 개인지 구하는 프로그램을 작성하시오.

N=3N = 3이고 N×N=9N \times N = 9개의 수가 9,8,7,6,5,4,3,2,19, 8, 7, 6, 5, 4, 3, 2, 1로 주어진 예를 생각해보자. 아래와 같이 총 4×2=84 \times 2 = 8가지 마방진을 만들 수 있음을 알 수 있다.

입력 형식

첫 줄에 마방진의 크기를 나타내는 정수 NN이 주어진다. (2N4)(2 \le N \le 4)

그다음 줄에 마방진에 사용할 N×NN \times N개의 정수가 공백으로 구분되어 주어진다. 이 수들은 모두 00 이상 100100 이하이다.

출력 형식

첫 줄에 만들 수 있는 서로 다른 마방진의 수를 출력한다.

예제 1

입력

3 9 8 7 6 5 4 3 2 1

출력

8

예제 2

입력

2 1 0 1 0

출력

0

예제 3

입력

4 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4

출력

256

예제 4

입력

3 0 0 0 0 0 0 0 0 0

출력

1

채점 방식

입력 케이스들은 다음과 같은 종류로 구별되며, 한 종류의 케이스를 다 맞혀야 그 종류에 배정된 점수를 받을 수 있다.

종류 1: 3

N=2N = 2

종류 2: 16

N=3N = 3

종류 3: 54

N=4N = 4

종류 4: 18

주어진 N×NN \times N개의 수는 각각 00 또는 11이다.

종류 5: 9

모든 입력 케이스가 주어진다.

해설