뱀 두 마리 배치하기

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

보통6수학조합론구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

두 마리의 뱀 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가 주어진다. (1T1000001 \le T \le 100\,000)

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

출력

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