돌 제거
시간 제한1.5초메모리 제한1024 MB
각 더미의 범위 안에서 초기 돌 개수를 정하고 k개의 돌을 숨긴 뒤, 두 연산으로 모든 돌을 없앨 수 있는 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
문제
개의 더미가 일렬로 놓여 있고, 번째 더미에는 개의 돌이 있다. 다음 두 연산으로 모든 돌을 제거해야 한다.
- 더미 하나를 골라 그 더미에서 돌을 2개 이상 제거한다.
- 를 만족하는 연속 구간 을 고르고, 구간에 속한 모든 더미에서 돌을 1개씩 제거한다.
두 연산은 순서에 상관없이 원하는 횟수만큼 수행할 수 있으며, 더 이상 수행할 수 없을 때까지 진행한다. 모든 돌을 제거하면 이긴다.
게임을 시작하기 전에 숨겨진 돌 개를 한 더미 또는 여러 더미에 넣어야 한다. 개를 어떻게 나누어 넣을지는 자유롭게 정할 수 있다. 각 더미 의 초기 돌 개수 는 범위 안의 정수 중 하나다. 이기는 초기 상태의 개수를 로 나눈 나머지를 구한다. 적어도 하나의 가 다르면 두 상태는 서로 다른 상태다. 여기서 초기 상태란 개의 돌을 넣기 전의 상태를 뜻한다.
입력
첫 줄에 테스트케이스의 개수 가 주어진다. 각 테스트케이스의 첫 줄에는 과 가 주어진다. 이어서 개의 줄에 각 더미의 범위 와 가 주어진다.
출력
각 테스트케이스마다 이기는 초기 상태의 개수를 로 나눈 나머지를 한 줄에 출력한다.