좋은 배열 세기
시간 제한1초메모리 제한512 MB
1부터 n까지의 수에 하나를 중복시킨 배열 중 점수가 [a,b]에 들어가는 것의 개수를 1e9+7로 나눈 나머지로 센다.
문제
Albert는 최근 재미있는 문제를 풀고 있다. 길이 n+1인 배열 A가 1부터 n-1까지의 정수를 한 번씩 포함하고, n을 두 번 포함하면 배열 A는 좋은 배열이다. 길이가 n+1인 좋은 배열의 개수는 정확히 (n+1)!/2 개 존재한다.
A가 길이 n+1인 좋은 배열이라면, Score(A) 는 다음과 같이 정의 된다: 1 ≤ i < j ≤ n+1 과 A[i] < A[j] 를 만족하는 쌍 (i, j)의 개수. 만약 A = [1, 2, 3, ..., n-1, n, n] 이라면 Score(A)는 (n+2)(n-1)/2로 최대가 되며, A = [n, n, n-1, n-2, ..., 2, 1] 이라면 Score(A) = 0으로 최소가 된다.
Albert는 n과 두 개의 정수 a, b 가 주어졌을 때, a ≤ Score(A) ≤ b 를 만족하는 길이 n+1인 좋은 배열의 개수를 세는 문제를 풀고 싶다. 예를 들어, n = 3, a = 2, b = 3 이라 하자. 총 12개의 좋은 배열 중 a ≤ Score(A) ≤ b를 만족하는 길이 4인 좋은 배열의 개수는 6개이다.
- A = [1, 2, 3, 3]: Score(A) = 5
- A = [1, 3, 2, 3]: Score(A) = 4
- A = [1, 3, 3, 2]: Score(A) = 3 (만족)
- A = [2, 1, 3, 3]: Score(A) = 4
- A = [2, 3, 1, 3]: Score(A) = 3 (만족)
- A = [2, 3, 3, 1]: Score(A) = 2 (만족)
- A = [3, 1, 2, 3]: Score(A) = 3 (만족)
- A = [3, 1, 3, 2]: Score(A) = 2 (만족)
- A = [3, 2, 1, 3]: Score(A) = 2 (만족)
- A = [3, 2, 3, 1]: Score(A) = 1
- A = [3, 3, 1, 2]: Score(A) = 1
- A = [3, 3, 2, 1]: Score(A) = 0
입력으로 n, a, b 가 주어졌을 때, a ≤ Score(A) ≤ b 를 만족하는 길이 n+1인 좋은 배열 A의 개수를 출력하는 프로그램을 작성하시오.
입력
첫 줄에 테스트 케이스의 수 T가 주어진다.
각 테스트 케이스는 한 줄에 n, a, b 가 공백으로 구분되어 주어진다.
출력
각 테스트 케이스의 정답을 한 줄에 출력한다.
단, 답이 매우 클 수 있으므로 정답을 109+7 (= 1,000,000,007) 로 나눈 값을 출력한다.
제한
- 1 ≤ T ≤ 10,000
- 2 ≤ n ≤ 1,000
- 0 ≤ a ≤ b ≤ 1,000