배열의 흥미로운 세계

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

요약
길이 n인 배열에서 각 원소 a[i]가 값 i의 등장 횟수를 m으로 나눈 나머지와 같아지는 배열의 개수를 구한다. n은 최대 12, m은 최대 10^9이다.
난이도

어려움10점 중 8점

유형
조합론, 수학, 완전 탐색, 백트래킹
정답자
아직 제출이 없습니다

문제

Gwen은 "배열의 흥미로운 세계"라는 제목의 박사 학위 논문을 거의 끝내려 한다. 그녀는 여러 종류의 배열을 연구하는데, 가장 좋아하는 것은 계수 배열이다. 계수 배열은 배열에서 가능한 각 값이 몇 번 나타나는지를 세는 배열이다. 형식적으로, A = [a0, a1, . . . , an−1]의 계수 배열 [c0, c1, c2, . . . , cn−1]은 A에 0이 c0개, 1이 c1개, 2가 c2개 있는 식으로 정의된다. 예를 들어 A = [4, 1, 2, 0, 2]라면 계수는 [1, 1, 2, 0, 1]이다. 계수 배열은 모든 0 ≤ i < n에 대해 ai가 정수이고 0 ≤ ai < n일 때만 정의된다.

Gwen의 논문 마지막 장은 mod-m 자기서술 배열에 관한 것이다. A = [a0, a1, . . . , an−1]의 계수 배열을 [c0, c1, . . . , cn−1]이라 하자. 양의 정수 m에 대해, 모든 0 ≤ i < n에서 ai ≡ ci (mod m)이면 A를 mod-m 자기서술 배열이라 한다. 즉, ai와 ci를 m으로 나눈 나머지가 같다. 예를 들어 A = [6, 6, 4, 6, 3, 5, 3]과 그 계수 배열 [0, 0, 0, 2, 1, 1, 3]을 보자. 둘은 mod 2에서 같으므로(둘 다 [0, 0, 0, 0, 1, 1, 1]이 된다), A는 mod-2 자기서술 배열이다.

Gwen이 논문을 제출하기 전에 남은 일은 여러 n과 m에 대해 mod-m 자기서술 배열의 개수를 계산하는 것뿐이다. 이 개수를 구하는 것을 도와주자.

입력

입력은 배열의 길이 n (1 ≤ n ≤ 12)과 나머지 연산의 법 m (2 ≤ m ≤ 109)을 포함하는 한 줄로 이루어진다.

출력

길이 n인 mod-m 자기서술 배열의 개수를 출력한다.

예제3

  1. 예제 1

    입력
    4 3
    
    예상 출력
    6
    
  2. 예제 2

    입력
    5 3
    
    예상 출력
    20
    
  3. 예제 3

    입력
    7 4
    
    예상 출력
    72