새해와 순열

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

요약
길이 n인 모든 순열에서 최댓값과 최솟값의 차가 구간 길이에서 1을 뺀 값과 같은 구간의 총 개수를 소수 m으로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

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

문제

순열이란 11부터 nn까지의 서로 다른 nn개의 정수를 임의의 순서로 나열한 배열이다. 예를 들어 [2,3,1,5,4][2,3,1,5,4]는 순열이지만, [1,2,2][1,2,2]는 순열이 아니고 (22가 두 번 등장한다), [1,3,4][1,3,4]도 순열이 아니다 (n=3n=3인데 44가 들어 있다).

수열 aa가 수열 bb의 부분 구간이라는 것은, bb의 앞에서 몇 개 (0개 또는 전부일 수도 있다)의 원소를 지우고 뒤에서 몇 개 (0개 또는 전부일 수도 있다)의 원소를 지워 aa를 얻을 수 있다는 뜻이다. 부분 구간을 [l,r][l, r]로 나타내며, 여기서 l,rl, r은 1≤l≤r≤n1 \le l \le r \le n인 두 정수다. 이는 앞에서 l−1l-1개의 원소를, 뒤에서 n−rn-r개의 원소를 지운 부분 구간을 가리킨다.

순열 p1,p2,…,pnp_1, p_2, \ldots, p_n에 대해, 틀린 구간이란 max⁡{pl,pl+1,…,pr}−min⁡{pl,pl+1,…,pr}=r−l\max\{p_l, p_{l+1}, \dots, p_r\} - \min\{p_l, p_{l+1}, \dots, p_r\} = r - l을 만족하는 부분 구간 [l,r][l,r]을 말한다. 예를 들어 순열 (6,7,1,8,5,3,2,4)(6, 7, 1, 8, 5, 3, 2, 4)의 틀린 구간으로는 [1,2],[5,8],[6,7],[3,3],[8,8][1, 2], [5, 8], [6, 7], [3, 3], [8, 8] 등이 있다. 특히 [i,i][i,i]는 11 이상 nn 이하의 모든 ii에 대해 항상 틀린 구간이다.

순열 pp의 행복도는 1≤l≤r≤n1 \le l \le r \le n이고 [l,r][l, r]이 틀린 구간인 순서쌍 (l,r)(l, r)의 개수로 정의한다. 예를 들어 순열 [3,1,2][3, 1, 2]의 행복도는 55이며, [1,2][1, 2]를 제외한 모든 구간이 틀린 구간이다.

정수 nn과 mm이 주어질 때, 종원이는 길이 nn인 모든 순열의 행복도의 합을 소수 mm으로 나눈 나머지를 구하려고 한다. 길이 nn인 순열은 n!n! (nn의 계승)개 있다.

입력

한 줄에 두 정수 nn과 mm이 주어진다. (1≤n≤250 0001 \le n \le 250\,000, 108≤m≤10910^8 \le m \le 10^9, mm은 소수)

출력

길이 nn인 모든 순열의 행복도의 합을 소수 mm으로 나눈 나머지 rr (0≤r<m0 \le r < m)을 출력한다.

힌트

예제 입력 n=3n=3에 대해 길이 33인 모든 순열을 살펴보자:

  • [1,2,3][1, 2, 3]: 모든 부분 구간이 틀린 구간이다. 행복도는 66.
  • [1,3,2][1, 3, 2]: [1,2][1, 2]를 제외한 모든 부분 구간이 틀린 구간이다. 행복도는 55.
  • [2,1,3][2, 1, 3]: [2,3][2, 3]을 제외한 모든 부분 구간이 틀린 구간이다. 행복도는 55.
  • [2,3,1][2, 3, 1]: [2,3][2, 3]을 제외한 모든 부분 구간이 틀린 구간이다. 행복도는 55.
  • [3,1,2][3, 1, 2]: [1,2][1, 2]를 제외한 모든 부분 구간이 틀린 구간이다. 행복도는 55.
  • [3,2,1][3, 2, 1]: 모든 부분 구간이 틀린 구간이다. 행복도는 66.

따라서 행복도의 합은 6+5+5+5+5+6=326+5+5+5+5+6 = 32이다.

예제5

  1. 예제 1

    입력
    1 993244853
    
    예상 출력
    1
    
  2. 예제 2

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

    입력
    3 993244853
    
    예상 출력
    32
    
  4. 예제 4

    입력
    2019 993244853
    
    예상 출력
    923958830
    
  5. 예제 5

    입력
    2020 437122297
    
    예상 출력
    265955509