아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

교란 순열의 회전

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

요약
크기 n인 교란 중에서 교란인 회전이 정확히 n-2개인 것의 개수를 소수 p로 나눈 나머지를 구한다.
난이도

어려움10점 중 9점

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

문제

교란 순열(Derangement)은 1,2,…,n1, 2, \dots, n의 순열 pp 중에서 모든 ii (1≤i≤n1 \le i \le n)에 대해 pi≠ip_i \ne i인 순열이다.

수열 a1,a2,…,ana_1, a_2, \dots, a_n의 오프셋 kk (1≤k≤n1 \le k \le n)만큼의 회전은 수열 ak,ak+1,…,an,a1,a2,…,ak−1a_k, a_{k+1}, \dots, a_n, a_1, a_2, \dots, a_{k-1}이다. 길이 nn인 수열의 서로 다른 회전은 최대 nn개다.

교란 순열 DD가 주어졌을 때, f(D)f(D)는 DD의 서로 다른 회전 중 다시 교란 순열이 되는 것의 개수다. 예를 들어 f([2,1])=1f([2, 1]) = 1, f([3,1,2])=2f([3, 1, 2]) = 2이다.

nn과 소수 pp가 주어졌을 때, f(D)=n−2f(D) = n - 2인 1,2,…,n1, 2, \dots, n의 교란 순열 DD의 개수를 pp로 나눈 나머지를 구한다.

입력

한 줄에 정수 nn (3≤n≤1063 \le n \le 10^6)과 소수 pp (108≤p≤109+710^8 \le p \le 10^9 + 7)가 주어진다. nn은 순열의 크기, pp는 소수다.

출력

f(D)=n−2f(D) = n - 2인 크기 nn의 교란 순열 DD의 개수를 pp로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

    입력
    3 1000000007
    
    예상 출력
    0
    
  2. 예제 2

    입력
    6 999999937 
    
    예상 출력
    20