#2058. 牛客周赛60E - 折返跑

牛客周赛60E - 折返跑

题目描述

上体育课了!今天的项目是折返跑,笔直的跑道可以看作是一条数轴。跑道上有 nn 个点位,其中,老师在 11 点和 nn 点处各放了两根杆子,称为左杆和右杆,作为折返跑的折返点。         老师规定,今天一共需要跑 mm 趟。我们认为,从一根杆子开始,跑到另一根杆子结束为一趟,显然,一共需要进行 m1m−1 次折返。Zaoly 偶然发现,杆子是可推动的,所以他有了一个大胆的想法——

  • 每次跑至右杆折返后,都需要把右杆向左推动一段距离(大于 00),但仍保证右杆位于整数点,且在左杆的右边(不能与左杆重合);
  • 每次跑至左杆折返后,都需要把左杆向右推动一段距离(大于 00),但仍保证左杆位于整数点,且在右杆的左边(不能与右杆重合)

现在,给出整数 nnmm 的值,请问 Zaoly 有多少种不同的推杆方法?由于答案可能很大,请将答案对 (109+7)(10^9+7) 取模后输出。注意,每次折返时都需要推杆,如果某一轮无法推动,则这一轮推杆非法。

输入格式

第一行输入一个整数 tt 代表 tt 组测试

每一组数据输入两个整数 n,mn,m

输出格式

输出一个整数代表答案

3
4 3
5 3
100 1
1
3
1

样例 1 解释

第二组数据解释如下:

  • 第一次折返时(位于右杆),将右杆向左推一个点位。随后在第二次折返时(位于左杆),将左杆向右推一个点位。
  • 第一次,右杆推动两个点位。第二次左杆右推一个点位。
  • 第一次右杆推一个点位,第二次左杆推两个点位。

没有其余操作方法。

数据范围

1t1041\leq t\leq 10^4

1m<n1061\leq m<n\leq 10^6