NoM
시간 제한0.2초메모리 제한1024 MB
같은 번호의 돌 두 개 사이 거리가 M의 배수가 되지 않도록 2N개의 돌을 일렬로 놓는 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
문제
Marcel은 최근 젠 정원 만들기를 새 취미로 삼았다. 그는 개의 돌을 정원 요소로 쓰는 자신만의 스타일을 빠르게 정했다. 돌의 절반은 초록색(이끼로 덮여 있음)이고 1부터 까지 서로 다른 번호가 붙어 있다. 나머지 절반은 회색(이끼가 자라지 않음)이고 마찬가지로 1부터 까지 서로 다른 번호가 붙어 있다. Marcel은 정원을 만들려고 돌들을 원하는 순서로 일렬로 놓는다. 이때 연속한 두 돌 사이의 거리는 정확히 1인치다.
정원의 미적 가치를 평가할 때 모든 정원은 아름답다고 본다. 다만 Marcel에게는 미신이 하나 있다. 같은 번호가 적힌 두 돌 사이의 거리가 인치의 배수이면 그 정원은 -unlucky이며, 정원을 만든 사람에게 큰 불운이 닥치고 Code::Blocks가 충돌한다. Marcel은 그런 정원을 절대 만들지 않는다. 나머지 정원은 모두 -lucky이다.
Marcel은 만들 수 있는 -lucky 정원을 모두 만들고 싶어 한다. 그에 앞서 개의 돌로 된 -lucky 정원이 몇 개 있는지 알고 싶어 한다. 두 정원 A와 B는 인 어떤 에 대해 A의 번째 돌과 B의 번째 돌의 색이 다르거나, 번호가 다르면 서로 다른 정원이다.
입력
입력은 한 줄이며, 두 정수 과 이 주어진다. 이는 Marcel이 개의 돌로 된 -lucky 정원을 만든다는 뜻이다.
출력
한 줄에 개의 돌로 된 -lucky 정원의 개수를 로 나눈 나머지를 출력한다.
제한
힌트
두 번째 예제에서는 정원을 두 개 만들 수 있다. 하지만 이면 -lucky인 정원은 하나도 없다. 두 정원 모두 번호 1이 적힌 돌 사이의 거리가 1인치이고, 이는 인치의 배수이기 때문이다.