만드는 중입니다

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

돌 제거

시간 제한1.5초메모리 제한1024 MB

요약
각 더미의 범위 안에서 초기 돌 개수를 정하고 k개의 돌을 숨긴 뒤, 두 연산으로 모든 돌을 없앨 수 있는 경우의 수를 10^9+7로 나눈 나머지로 구합니다.
난이도

보통10점 중 7점

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

문제

nn개의 더미가 일렬로 놓여 있고, ii번째 더미에는 aia_i개의 돌이 있다. 다음 두 연산으로 모든 돌을 제거해야 한다.

  • 더미 하나를 골라 그 더미에서 돌을 2개 이상 제거한다.
  • r−l≥2r - l \geq 2를 만족하는 연속 구간 [l,r][l, r]을 고르고, 구간에 속한 모든 더미에서 돌을 1개씩 제거한다.

두 연산은 순서에 상관없이 원하는 횟수만큼 수행할 수 있으며, 더 이상 수행할 수 없을 때까지 진행한다. 모든 돌을 제거하면 이긴다.

게임을 시작하기 전에 숨겨진 돌 kk개를 한 더미 또는 여러 더미에 넣어야 한다. kk개를 어떻게 나누어 넣을지는 자유롭게 정할 수 있다. 각 더미 ii의 초기 돌 개수 aia_i는 범위 [li,ri][l_i, r_i] 안의 정수 중 하나다. 이기는 초기 상태의 개수를 109+710^9+7로 나눈 나머지를 구한다. 적어도 하나의 aia_i가 다르면 두 상태는 서로 다른 상태다. 여기서 초기 상태란 kk개의 돌을 넣기 전의 상태를 뜻한다.

입력

첫 줄에 테스트케이스의 개수 TT가 주어진다. 각 테스트케이스의 첫 줄에는 nn과 kk가 주어진다. 이어서 nn개의 줄에 각 더미의 범위 lil_i와 rir_i가 주어진다.

출력

각 테스트케이스마다 이기는 초기 상태의 개수를 109+710^9+7로 나눈 나머지를 한 줄에 출력한다.

제한

  • T≤10T \leq 10
  • 3≤n≤10003 \leq n \leq 1000
  • 0≤li≤ri≤1090 \leq l_i \leq r_i \leq 10^9
  • 0≤k≤1000 \leq k \leq 100

예제1

  1. 예제 1

    입력
    1
    4 1
    0 1
    0 1
    0 1
    0 1
    
    예상 출력
    14