나이트의 이동 2
시간 제한2초메모리 제한512 MB
2n x 2n 체스판의 왼쪽 위 칸에서 출발한 나이트가 k번 이하의 이동으로 네 모서리 중 한 곳에 도착하는 경로의 수를 1000007로 나눈 나머지를 구합니다.
문제
크기가 인 체스판의 가장 왼쪽 위 칸에 나이트가 하나 놓여 있다. 나이트는 한 번 움직일 때 한 방향으로 두 칸, 그와 수직인 방향으로 한 칸 이동한다. 즉 행과 열이 각각 또는 만큼 바뀐다. 체스판 밖으로 나가는 이동은 할 수 없다.
모서리 칸은 체스판의 네 꼭짓점에 있는 칸, 즉 왼쪽 위, 오른쪽 위, 왼쪽 아래, 오른쪽 아래 칸이다.
나이트를 최대 번 움직여서 모서리 칸에 도착하는 방법의 수를 구하는 프로그램을 작성하시오. 이동 횟수가 다르거나 지나는 칸의 순서가 다르면 서로 다른 방법으로 센다. 나이트는 처음부터 왼쪽 위 모서리에 있으므로 한 번도 움직이지 않는 것도 방법 하나로 센다.
정리하면 인 모든 에 대해, 왼쪽 위 칸에서 출발해 정확히 번 움직인 뒤 모서리 칸에서 끝나는 경로의 개수를 구하고, 그 값을 모두 더한다. 같은 칸을 여러 번 지나도 되고, 모서리 칸에 들어갔다가 다시 나와도 된다.
입력
첫째 줄에 테스트 케이스의 개수 ()가 주어진다.
이어지는 개의 줄에 테스트 케이스가 한 줄씩 주어진다. 각 줄에는 두 정수 과 가 공백으로 구분되어 주어진다. (, )
출력
각 테스트 케이스마다 방법의 수를 로 나눈 나머지를 한 줄에 출력한다.