만드는 중입니다

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

NoM

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

요약
같은 번호의 돌 두 개 사이 거리가 M의 배수가 되지 않도록 2N개의 돌을 일렬로 놓는 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

Marcel은 최근 젠 정원 만들기를 새 취미로 삼았다. 그는 2N2N개의 돌을 정원 요소로 쓰는 자신만의 스타일을 빠르게 정했다. 돌의 절반은 초록색(이끼로 덮여 있음)이고 1부터 NN까지 서로 다른 번호가 붙어 있다. 나머지 절반은 회색(이끼가 자라지 않음)이고 마찬가지로 1부터 NN까지 서로 다른 번호가 붙어 있다. Marcel은 정원을 만들려고 돌들을 원하는 순서로 일렬로 놓는다. 이때 연속한 두 돌 사이의 거리는 정확히 1인치다.

정원의 미적 가치를 평가할 때 모든 정원은 아름답다고 본다. 다만 Marcel에게는 미신이 하나 있다. 같은 번호가 적힌 두 돌 사이의 거리가 MM인치의 배수이면 그 정원은 MM-unlucky이며, 정원을 만든 사람에게 큰 불운이 닥치고 Code::Blocks가 충돌한다. Marcel은 그런 정원을 절대 만들지 않는다. 나머지 정원은 모두 MM-lucky이다.

Marcel은 만들 수 있는 MM-lucky 정원을 모두 만들고 싶어 한다. 그에 앞서 2N2N개의 돌로 된 MM-lucky 정원이 몇 개 있는지 알고 싶어 한다. 두 정원 A와 B는 1≤i≤2N1 \le i \le 2N인 어떤 ii에 대해 A의 ii번째 돌과 B의 ii번째 돌의 색이 다르거나, 번호가 다르면 서로 다른 정원이다.

입력

입력은 한 줄이며, 두 정수 NN과 MM이 주어진다. 이는 Marcel이 2N2N개의 돌로 된 MM-lucky 정원을 만든다는 뜻이다.

출력

한 줄에 2N2N개의 돌로 된 MM-lucky 정원의 개수를 109+710^9 + 7로 나눈 나머지를 출력한다.

제한

1≤M≤N≤20001 \le M \le N \le 2000

힌트

두 번째 예제에서는 정원을 두 개 만들 수 있다. 하지만 M=1M = 1이면 11-lucky인 정원은 하나도 없다. 두 정원 모두 번호 1이 적힌 돌 사이의 거리가 1인치이고, 이는 M=1M = 1인치의 배수이기 때문이다.

예제2

  1. 예제 1

    입력
    100 23
    
    예상 출력
    171243255
    
  2. 예제 2

    입력
    1 1
    
    예상 출력
    0