만드는 중입니다

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

간격 없는 순열

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

요약
길이 n인 순열 가운데 길이가 2 이상 n-1 이하인 연속 구간의 값이 연속된 정수를 이루지 않는 순열의 개수를 소수 p로 나눈 나머지로 구합니다.
난이도

어려움10점 중 9점

유형
조합론, 동적 계획법, 수학
정답자
아직 제출이 없습니다

문제

11부터 nn까지의 정수로 이루어진 순열 p1,p2,…,pnp_1, p_2, \ldots, p_n을 생각하자. 순열의 연속된 부분 pl,pl+1,…,prp_l, p_{l+1}, \ldots, p_r이 연속된 정수 집합을 재배열한 것이면 이를 구간이라고 한다. 예를 들어 순열 (6,7,1,8,5,3,2,4)(6, 7, 1, 8, 5, 3, 2, 4)에는 (6,7)(6, 7), (5,3,2,4)(5, 3, 2, 4), (3,2)(3, 2) 등의 구간이 있다.

모든 순열에는 자명한 구간이 있다. 순열 전체와 원소 하나로 이루어진 구간이 그것이다. 길이가 22 이상 n−1n-1 이하인 자명하지 않은 구간이 없는 순열을 간격 없는 순열이라고 한다.

길이가 nn인 간격 없는 순열의 개수를 소수 pp로 나눈 나머지를 구하라.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤4001 \le t \le 400)와 소수 pp (108≤p≤10910^8 \le p \le 10^9)가 주어진다. 이후 tt개의 줄에는 순열의 길이 nn (1≤n≤4001 \le n \le 400)이 한 줄에 하나씩 주어진다.

출력

각 테스트 케이스마다 길이가 nn인 간격 없는 순열의 개수를 pp로 나눈 나머지를 한 줄에 출력한다.

힌트

n=1n = 1이면 유일한 순열이 간격 없는 순열이다. n=4n = 4이면 간격 없는 순열은 (2,4,1,3)(2, 4, 1, 3)과 (3,1,4,2)(3, 1, 4, 2) 두 개이다. n=5n = 5이면 (2,4,1,5,3)(2, 4, 1, 5, 3), (2,5,3,1,4)(2, 5, 3, 1, 4), (3,1,5,2,4)(3, 1, 5, 2, 4), (3,5,1,4,2)(3, 5, 1, 4, 2), (4,1,3,5,2)(4, 1, 3, 5, 2), (4,2,5,1,3)(4, 2, 5, 1, 3) 여섯 개이다. n=9n = 9이면 28146개이므로 전부 나열하지 않는다. 예를 들어 (4,7,9,5,1,8,2,6,3)(4, 7, 9, 5, 1, 8, 2, 6, 3), (2,4,6,1,9,7,3,8,5)(2, 4, 6, 1, 9, 7, 3, 8, 5), (3,6,9,4,1,5,8,2,7)(3, 6, 9, 4, 1, 5, 8, 2, 7), (8,4,9,1,3,6,2,7,5)(8, 4, 9, 1, 3, 6, 2, 7, 5)는 간격 없는 순열이다.

예제2

  1. 예제 1

    입력
    4 998244353
    1
    4
    5
    9
    
    예상 출력
    1
    2
    6
    28146
    
  2. 예제 2

    입력
    1 437122297
    20
    
    예상 출력
    67777575