만드는 중입니다

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

MP3 플레이어

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

요약
1부터 n까지의 수를 배열할 때 연속된 두 수가 이웃하지 않는 경우의 수를 m으로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

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

문제

바샤는 얼마 전 새 MP3 플레이어 doPi Shuffle을 샀다. 이 플레이어에는 바샤가 써 본 다른 기기와 달리 재생 목록(플레이리스트)의 곡 순서를 섞는 "셔플" 기능이 있다.

바샤는 좋아하는 곡 nn개를 플레이어에 넣었다. 그 곡들은 오랫동안 컴퓨터에서 들어서 재생 목록의 순서를 잘 기억하고 있다.

플레이어는 곡을 무작위 순서로 바꿔 놓았다. 재생 목록을 여러 번 들어 본 바샤는 원래 목록에서 바로 이어져 있던 두 곡이 새 목록에서는 이어져 있지 않다는 것을 알았다. 이런 상황이 얼마나 자주 가능한지 궁금해졌다.

컴퓨터의 재생 목록 순서대로 곡에 1부터 nn까지 번호를 붙이자. 번호가 연속된 두 곡이 서로 옆에 오지 않도록 곡을 다시 배열하는 방법의 수를 구하는 프로그램을 작성하라. 이 수는 매우 클 수 있으므로 mm으로 나눈 나머지를 출력한다.

입력

입력 파일에는 두 정수 nn과 mm이 주어진다 (2≤n≤20002 \le n \le 2000, 2≤m≤1092 \le m \le 10^9).

출력

조건을 만족하는 배열 방법의 수를 mm으로 나눈 나머지를 출력한다.

예제2

  1. 예제 1

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

    입력
    5 1000000
    
    예상 출력
    53