#CF2127F. Hamed 和 AghaBalaSar

Hamed 和 AghaBalaSar

时间限制: 每个测试 22
内存限制: 每个测试 512512 MB

Hamid 为 a+b 问题写了 30143014 行代码,并把其中 1010 行给了 Hamed;于是 Hamed 想到了下面的问题。

给定两个整数 nnmm

一个数组 a1,a2,,ana_1, a_2, \dots, a_n 被称为 蛇形数组,当且仅当以下所有条件成立:

  • aa 中的所有元素都是介于 00mm 之间的整数;
  • a1+a2++an=ma_1 + a_2 + \cdots + a_n = m
  • an=max([a1,a2,,an])a_n = \max([a_1, a_2, \dots, a_n])

定义 f(a)f(a) 如下面的伪代码所示:

function f(array a):
    pos := 1
    res := 0
    设 nxt[x] 为一个数组,满足 nxt[x] 是使得 y > x 且 a[y] > a[x] 的最小下标 y,
                          若不存在这样的 y 则为 undefined
    while pos < n:
        if a[pos] < a[n]:
            res += a[nxt[pos]] - a[pos]
            pos := nxt[pos]
        else:
            pos += 1
    return res

求所有蛇形数组 a1,a2,,ana_1, a_2, \dots, a_nf(a)f(a) 之和,结果对 109+710^9+7 取模。


输入
每个测试包含多个测试用例。第一行包含测试用例数 tt1t1041 \le t \le 10^4)。接下来是每个测试用例的描述。

每个测试用例的第一行包含两个整数 nnmm2n21052 \le n \le 2 \cdot 10^50m21050 \le m \le 2 \cdot 10^5)—— 蛇形数组的长度以及所有元素之和。

保证所有测试用例的 mm 之和不超过 21052 \cdot 10^5


输出
对于每个测试用例,输出一个整数 —— 所有蛇形数组的 f(a)f(a) 之和,对 109+710^9+7 取模。


样例输入

8
2 5
3 4
4 6
5 10
6 23
100 100
142857 33333
200000 0

样例输出

9
14
76
985
142112
771227753
865580631
0

提示
在第一个测试用例中,共有三个蛇形数组:

  • f([0,5])=5f([0, 5]) = 5
  • f([1,4])=3f([1, 4]) = 3
  • f([2,3])=1f([2, 3]) = 1
    因此答案为 5+3+1=95 + 3 + 1 = 9

在第二个测试用例中,共有六个蛇形数组:

  • f([0,0,4])=4f([0, 0, 4]) = 4
  • f([0,1,3])=3f([0, 1, 3]) = 3
  • f([1,0,3])=2f([1, 0, 3]) = 2
  • f([1,1,2])=1f([1, 1, 2]) = 1
  • f([0,2,2])=2f([0, 2, 2]) = 2
  • f([2,0,2])=2f([2, 0, 2]) = 2
    因此答案为 4+3+2+1+2+2=144 + 3 + 2 + 1 + 2 + 2 = 14

在第五个测试用例中,一个可能的蛇形数组为:

  • f([3,1,4,1,5,9])=6f([3, 1, 4, 1, 5, 9]) = 6