만드는 중입니다

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

야구 코트

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

요약
N개의 타일을 a×b 땅에 모두 놓아, 북쪽과 동쪽에 이웃이 없는 타일이 남서쪽 모서리에서 같은 맨해튼 거리에 있는 배치의 수를 구합니다.
난이도

보통10점 중 7점

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

문제

NCPC 심사위원단은 긴 회의 끝에 참가자들의 심장이 빨리 뛰게 하면 대회가 더 좋아질 것이라고 결정했다. 그래서 프로그래밍 대회 전에 자랑거리를 걸고 겨룰 스포츠 경기를 열기로 했다. 모자에서 무작위로 뽑았더니 종목은 야구가 되었다. 이제 남은 일은 경기할 적당한 코트를 만드는 것이다. NCPC 심사위원단은 크기가 aa미터 × bb미터인 직사각형 땅을 갖고 있다. 또한 한 변이 1미터인 정사각형 잔디 타일 NN장이 있으며, 이 타일들을 땅 위에 놓아 코트를 만들 수 있다. 모든 잔디 타일은 변이 땅의 가장자리와 평행하게 놓아야 한다.

땅의 남서쪽 모서리가 타격 지점이다. 타일이 유효한 코트를 이루려면 두 조건을 만족해야 한다. 첫째, 모든 타일의 남쪽 변과 서쪽 변은 땅의 가장자리나 다른 타일에 바로 닿아 있어야 한다. 이는 공이 직선 궤적을 따라 코트 밖으로 나갔다가 다시 들어오는 일을 막기 위함이다. 둘째, 북쪽과 동쪽에 인접한 타일이 없는 모든 타일은 타격 지점으로부터 맨해튼 거리가 같아야 한다. 이는 타자가 특정 방향을 선호하지 않도록 하기 위함이다.

타일을 놓는 방법 중 유효한 야구 코트가 되는 경우의 수를 구하시오.

입력

첫 줄에 사용할 수 있는 잔디 타일의 개수를 나타내는 양의 정수 NN (1≤N≤1041 \leq N \leq 10^4)이 주어진다. 둘째 줄에 코트를 만들 수 있는 땅의 크기를 나타내는 양의 정수 aa와 bb (1≤a,b≤1041 \leq a, b \leq 10^4)가 주어진다.

출력

유효한 야구 코트를 만드는 잔디 타일 배치 방법의 수를 출력한다. 주어진 nn장의 잔디 타일을 모두 사용해야 한다. 이 수는 매우 클 수 있으므로 109+710^9 + 7로 나눈 나머지를 출력한다.

예제3

  1. 예제 1

    입력
    15
    3 8
    
    예상 출력
    3
    
  2. 예제 2

    입력
    15
    3 5
    
    예상 출력
    1
    
  3. 예제 3

    입력
    15
    3 4
    
    예상 출력
    0