만드는 중입니다

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

헤드위그의 사다리

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

요약
사다리 모양 튜브 네트워크에서 A0에서 출발해 길이가 N이고 같은 교차점을 두 번 지나지 않는 경로의 수를 10007로 나눈 나머지로 구합니다.
난이도

보통10점 중 6점

유형
동적 계획법, 재귀
정답자
아직 제출이 없습니다

문제

햄스터 헤드위그는 햄스터 튜브로 이루어진 네트워크를 탐험하는 것을 좋아한다. 매일 주인이 튜브를 다시 배열해서 새로운 튜브 네트워크를 만든다.

어느 날 헤드위그가 일어나 보니 튜브 네트워크가 아래 그림처럼 사다리 모양으로 배치되어 있었다. 각 교차점(An, Bn)에는 당근 조각이 하나씩 놓여 있다(헤드위그는 당근을 아주 좋아한다!). 헤드위그는 아직 새 튜브 네트워크를 탐험하지 않았고, 이 네트워크가 얼마나 긴지 알지 못한다(끝이 없을 수도 있다!).

헤드위그는 길이가 주어지면 시작점 A0에서 그 길이만큼 이동하는 경로가 몇 개인지 세는 게임을 만들었다. 규칙은 다음과 같다. 교차점에 도착할 때마다 헤드위그는 그곳의 당근을 먹는다. 교차점은 헤드위그가 도착했을 때 당근이 남아 있어야만 지날 수 있다.

헤드위그를 도와, A0에서 출발해 주어진 길이의 경로 중 어떤 교차점도 두 번 이상 지나지 않는 경로의 수를 구하는 프로그램을 작성하라. 예를 들어 길이 3인 경로는 모두 아래와 같다.

입력

첫 줄에는 뒤따르는 데이터 세트의 개수를 나타내는 10진수 정수 PP (1≤P≤8001 \le P \le 800)가 주어진다. 각 데이터 세트는 서로 독립적으로 같은 방식으로 처리된다.

각 데이터 세트는 한 줄로 이루어져 있으며, 데이터 세트 번호 KK와 세야 할 경로의 길이 NN (1≤N≤10001 \le N \le 1000)이 순서대로 주어진다.

출력

각 데이터 세트에 대해 데이터 세트 번호 KK에 이어, 길이 NN인 경로의 수를 10007로 나눈 나머지를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    4
    1 3
    2 9
    3 18
    4 111
    
    예상 출력
    1 6
    2 110
    3 8361
    4 237