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

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

뱀 두 마리 배치하기

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

요약
n×m 격자에 너비가 1인 두 직사각형(키키 길이 k, 수수 길이 s)을 서로 겹치지 않게 놓는 순서 있는 배치의 수를 1e9+7로 나눈 나머지를 구한다. 머리와 꼬리 방향도 구분한다.
난이도

보통10점 중 6점

유형
수학, 조합론, 구현
정답자
아직 제출이 없습니다

문제

두 마리의 뱀 Kiki와 Susu는 n×mn \times m 직사각형 격자 위에서 노는 것을 좋아한다. 게임이 진행되는 동안에는 규칙을 신경 쓰지 않고 마구 뒤섞이지만, 게임을 시작하는 순간의 배치는 다음 규칙을 따른다.

  1. 각 뱀은 한쪽 변의 길이가 1인 직사각형 하나로 나타낸다. Kiki는 칸 kk개, Susu는 칸 ss개를 차지한다.
  2. 각 뱀은 수평 방향 또는 수직 방향으로 놓인다.
  3. 두 뱀 모두 격자 안에 완전히 들어가야 한다.
  4. 두 뱀이 같이 차지하는 칸이 있으면 안 된다.

아래 그림에서 위쪽 두 가지는 올바른 배치, 아래쪽 두 가지는 잘못된 배치다. 격자는 5×55 \times 5이고 두 뱀의 길이는 모두 3이다.

올바른 배치와 잘못된 배치

머리가 어느 쪽 끝에 있는지도 배치의 일부로 센다. 머리가 (x1,y1)(x_1, y_1)이고 꼬리가 (x2,y2)(x_2, y_2)인 배치와, 머리가 (x2,y2)(x_2, y_2)이고 꼬리가 (x1,y1)(x_1, y_1)인 배치는 서로 다른 배치다. 길이가 1인 뱀은 머리와 꼬리가 같은 칸이므로 방향을 구분하지 않고, 어느 칸에 놓였는지로만 구분한다. Kiki와 Susu는 서로 다른 뱀이라서 두 뱀의 자리를 맞바꾼 배치도 서로 다른 배치로 센다.

격자의 크기 nn, mm과 Kiki의 길이 kk, Susu의 길이 ss가 주어질 때, 게임을 시작할 수 있는 배치의 수를 구하자.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤100 0001 \le T \le 100\,000)

이어서 각 테스트 케이스가 한 줄씩 주어진다. 한 줄에는 격자의 크기 nn, mm과 Kiki의 길이 kk, Susu의 길이 ss가 공백으로 구분되어 주어진다. (1≤n,m≤100 0001 \le n, m \le 100\,000, 1≤k,s≤min⁡(n,m)1 \le k, s \le \min(n, m))

출력

각 테스트 케이스마다 Case c: x 형식으로 한 줄에 출력한다. cc는 1부터 매기는 테스트 케이스 번호이고, xx는 배치의 수를 1 000 000 0071\,000\,000\,007(=109+7= 10^9 + 7)로 나눈 나머지다.

예제2

  1. 예제 1

    입력
    4
    2 2 2 2
    3 3 3 3
    2 3 2 2
    4 4 3 2
    
    예상 출력
    Case 1: 16
    Case 2: 48
    Case 3: 88
    Case 4: 1056
    
  2. 예제 2

    입력
    3
    1 1 1 1
    1 3 1 1
    2 2 1 2
    
    예상 출력
    Case 1: 0
    Case 2: 6
    Case 3: 16