만드는 중입니다

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

셜록과 순열 정렬 (라지)

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

요약
순열 1..N의 모든 순열 p에 대해, 각 블록을 따로 정렬해 이어 붙이는 방식으로 나눌 수 있는 최대 블록 수 f(p)의 제곱을 합한 값을 M으로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

셜록과 왓슨은 프로그래밍 수업에서 정렬을 배웠다. 병렬 계산에 관심이 많은 왓슨은 11부터 NN까지의 정수로 이루어진 순열을 여러 덩어리로 쪼갠 뒤, 각 덩어리를 따로 정렬하고 다시 이어 붙이는 방식으로 전체를 정렬하려고 한다.

순열 p1,p2,…,pNp_1, p_2, \dots, p_N에서 덩어리란 연속한 부분 배열이다. 즉 1≤i≤j≤N1 \le i \le j \le N인 두 인덱스 ii, jj에 대해 pi,pi+1,…,pjp_i, p_{i+1}, \dots, p_j를 뜻한다.

왓슨은 원소의 순서를 바꾸지 않은 채로 순열을 하나 이상의 덩어리로 나눈다. 모든 원소는 정확히 한 덩어리에 속하고, 한 덩어리의 모든 원소는 그보다 뒤에 있는 모든 덩어리의 모든 원소보다 작아야 한다. 예를 들어 순열 [2,1,3,5,4][2, 1, 3, 5, 4]를 나누는 방법은 다음 네 가지뿐이다.

[[2,1,3],[5,4]][[2,1],[3,5,4]][[2,1],[3],[5,4]][[2,1,3,5,4]][[2, 1, 3], [5, 4]] \quad [[2, 1], [3, 5, 4]] \quad [[2, 1], [3], [5, 4]] \quad [[2, 1, 3, 5, 4]]

왓슨은 덩어리가 많을수록 기뻐한다. 순열 pp를 나눌 때 만들 수 있는 덩어리 개수의 최댓값을 f(p)f(p)라고 하자. 위 예에서 최댓값은 33이다.

11부터 NN까지의 수로 만들 수 있는 모든 순열 pp에 대해 f(p)2f(p)^2의 합을 구하라. 합이 매우 커질 수 있으므로 MM으로 나눈 나머지를 출력한다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트 케이스가 주어진다. 각 테스트 케이스는 두 정수 NN과 MM이 공백으로 구분되어 적힌 한 줄로 이루어진다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 11부터 시작하는 테스트 케이스 번호이고, yy는 크기가 NN인 모든 순열 pp에 대한 f(p)2f(p)^2의 합을 MM으로 나눈 나머지이다.

제한

  • 1≤T≤201 \le T \le 20
  • 1≤N≤50001 \le N \le 5000
  • 1≤M≤1091 \le M \le 10^9

설명

N=1N = 1이면 순열은 [1][1] 하나뿐이고 f([1])=1f([1]) = 1이므로 제곱의 합은 11이다.

N=2N = 2이면 순열은 두 개다. f([1,2])=2f([1, 2]) = 2이고 f([2,1])=1f([2, 1]) = 1이므로 제곱의 합은 22+12=52^2 + 1^2 = 5이다.

N=3N = 3이면 순열은 여섯 개다. f([1,2,3])=3f([1, 2, 3]) = 3, f([1,3,2])=2f([1, 3, 2]) = 2, f([2,1,3])=2f([2, 1, 3]) = 2, f([2,3,1])=1f([2, 3, 1]) = 1, f([3,1,2])=1f([3, 1, 2]) = 1, f([3,2,1])=1f([3, 2, 1]) = 1이므로 제곱의 합은 32+22+22+12+12+12=203^2 + 2^2 + 2^2 + 1^2 + 1^2 + 1^2 = 20이다.

MM이 11이면 나머지는 항상 00이다.

예제2

  1. 예제 1

    입력
    3
    1 2
    2 4
    3 7
    
    예상 출력
    Case #1: 1
    Case #2: 1
    Case #3: 6
    
  2. 예제 2

    입력
    10
    1 1000000000
    2 1000000000
    3 1000000000
    4 1000000000
    5 1000000000
    6 1000000000
    7 1000000000
    8 1000000000
    9 1000000000
    10 1000000000
    
    예상 출력
    Case #1: 1
    Case #2: 5
    Case #3: 20
    Case #4: 84
    Case #5: 396
    Case #6: 2140
    Case #7: 13320
    Case #8: 95184
    Case #9: 774864
    Case #10: 7114176