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

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

예쁜 수열

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

요약
1부터 N까지의 순열 중에서 인접한 두 수가 (x, x+1) 꼴로 나타나는 쌍을 적어도 하나 포함하는 순열의 개수를 M으로 나눈 나머지를 구한다. N은 10^18까지, M은 10^7까지이며 소수가 아닐 수 있다.
난이도

어려움10점 중 9점

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

문제

오늘은 수열의 날이다! 수학 선생님은 칠판에 1부터 N까지의 서로 다른 수 N개로 이루어진 수열 몇 개를 적고, 학생들에게 이 수열들이 특별한 성질을 가진다고 말했다. 학생 중 한 명인 Deni는 고민 끝에 그 성질을 알아냈다. 칠판에 적힌 모든 수열에는 (x, x + 1) 꼴의 인접한 두 수가 적어도 한 쌍 있었다. Deni는 기뻐서 이런 수열을 예쁘다고 불렀다. 예를 들어 N = 4일 때 수열 3, 1, 2, 4와 2, 3, 4, 1은 예쁘지만, 수열 2, 4, 1, 3과 4, 3, 2, 1은 예쁘지 않다. 그 후 수학 선생님은 Deni에게 더 어려운 문제를 냈다. 1부터 N까지의 서로 다른 수 N개로 만들 수 있는 모든 예쁜 수열의 개수를 구하라는 것이었다. 너무 어려워서 Deni는 수업이 끝날 때까지 답을 찾지 못했다. 당신은 Deni의 친구이고, Deni를 도와주려 한다.

주어진 N에 대해 예쁜 수열의 개수를 구하는 프로그램을 작성하라. 이 수는 매우 클 수 있으므로 M으로 나눈 나머지를 계산해야 한다.

입력

표준 입력의 첫째 줄에서 두 정수 N과 M을 읽는다. N은 칠판에 적힌 수열의 길이이고, M은 계산에 사용하는 모듈러스이다.

출력

표준 출력의 한 줄에 1부터 N까지의 서로 다른 수 N개로 이루어진 예쁜 수열의 개수를 M으로 나눈 나머지를 출력한다.

제한

  • 1 ≤ N ≤ 10^18
  • 2 ≤ M ≤ 10^7

예제2

  1. 예제 1

    입력
    4 42
    
    예상 출력
    13
    
  2. 예제 2

    입력
    2000 10009
    
    예상 출력
    1295