끝없는 나이트 (라지)
시간 제한5초메모리 제한512 MB
가로세로가 최대 1e8인 판에서 오른쪽과 아래로만 움직이는 나이트가 (1,1)에서 (H,W)까지 가는 경로의 수를, 최대 10개의 돌을 피해 10007로 나눈 나머지를 구한다.
문제
체스에는 나이트라는 기물이 있다. 나이트는 다른 기물처럼 직선으로 움직이지 않고 L자 모양으로 뛴다. 정확히 말하면 나이트는 를 만족할 때만 칸 에서 칸 로 뛴다.
이 문제에서 나이트 한 마리는 높이가 , 너비가 인 거대한 체스판에서 왼쪽 위 칸 을 떠나 오른쪽 아래 칸 까지 가야 한다.
조건은 다음과 같다.
- 나이트는 오른쪽과 아래쪽으로만 움직인다. 즉 한 번 뛸 때마다 행 번호와 열 번호가 모두 커지는 칸으로 간다. 그래서 목표에 도달하는 방법이 아예 없을 수도 있다. 예를 들어 판에서는 방법이 하나도 없다.
- 체스판에는 바위가 놓인 칸이 개 있다. 나이트는 그 칸에 착지하지 못한다. 뛰는 도중에 그 칸 위를 지나가는 것은 괜찮다.
에서 까지 가는 서로 다른 방법의 수를 구하라. 나이트가 착지하는 칸의 순서가 다르면 서로 다른 방법이다. 답이 매우 커질 수 있으므로 소수 10007로 나눈 나머지를 출력한다.
입력
첫째 줄에 테스트 케이스의 개수 이 주어진다. 이어서 개의 테스트 케이스가 주어진다.
각 테스트 케이스의 첫째 줄에 세 정수 , , 이 주어진다. 다음 개의 줄에는 각각 두 정수 과 가 주어지며, 바위 하나가 놓인 칸의 행 번호와 열 번호를 뜻한다. 과 에는 바위가 없고, 두 바위가 같은 칸에 놓이지도 않는다.
제한
출력
각 테스트 케이스마다 한 줄씩, Case #X: 뒤에 목표 칸에 도달하는 방법의 수를 10007로 나눈 나머지를 붙여 출력한다. 는 1부터 시작하는 테스트 케이스 번호이다.