火之歌
题号:NC293964
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

\hspace{15pt}“以我残躯化烈火”。
\hspace{15pt}给定两个整数 n,m,你需要构建一个方阵,满足:
\hspace{23pt}\bullet\,方阵的每一个元素均为整数,且大于等于 m
\hspace{23pt}\bullet\,矩阵的主对角线(即全部 y=x 的格子)上的数值和不超过 n
\hspace{23pt}\bullet\,记矩阵的大小为 k\times k,从矩阵中取出任意 k 个不在同一行同一列的整数,每一种取法k 个数值之和均相等。

\hspace{15pt}输出满足条件的不同的方阵数量。由于答案可能很大,请将答案对 (10^9+7) 取模后输出。

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 100\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}在一行上输入两个整数 n,m\left(1\leq n,m\leq 6\times 10^5\right),表示矩阵的两个构造限制。

T\\<br />n_1\ m_1\\<br />n_2\ m_2\\<br />\vdots\\<br />n_t\ m_t

输出描述:

\hspace{15pt}对于每组测试数据,新起一行输出一个整数表示答案。
示例1

输入

复制
6
2 1
6 5
10 5
11 6
12 6
9 2

输出

复制
3
2
7
6
8
191

说明

\hspace{15pt}对于第一组测试数据,有且仅有方阵 \begin{bmatrix}<br />1<br />\end{bmatrix}\begin{bmatrix}<br />2<br />\end{bmatrix}\begin{bmatrix}<br />1 & 1 \\<br />1 & 1<br />\end{bmatrix} 满足条件。
示例2

输入

复制
10
294 2
491 2
438 2
299 2
387 2
252 2
354 2
329 2
264 2
418 2

输出

复制
899709563
439264386
647789715
692949917
111075444
608532172
362065671
828748609
679278772
914456216