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

牛客周赛60E - 折返跑

题目描述

跑道上有 nn 个点位,其中,老师在 11 点和 nn 点处各放了两根杆子,称为左杆和右杆,作为折返跑的折返点。   老师规定,今天一共需要跑 mm 趟。我们认为,从一根杆子开始,跑到另一根杆子结束为一趟,显然,一共需要进行 m1m−1 次折返。

Zaoly 偶然发现,杆子是可推动的,所以他有了一个大胆的想法——

  • 每次跑至右杆后,都要把右杆向左推动一段距离(大于 00),但仍保证右杆位于整数点,且在左杆右边。(不能重合)
  • 每次跑至左杆以后,都要把左杆向右推动一段距离,要求同上。

现在给你 n,mn,m,求一共有多少种不同的推杆方法。答案对 109+710^9+7 取余。

输入格式

本题有多组数据

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

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

输出格式

输出 tt 行,每行一个整数代表答案。

3
4 3
5 3
100 1
1
3
1

提示

样例解释

第一组数据只有一种方案

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

第二组数据有三种方案:

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

第三组数据只有一种方案:

  • 由于只跑一趟,没有折返,所以没有推杆,这也算作一种推杆方法。

数据范围

1t1041\leq t\leq 10^41m<n1061\leq m<n\leq 10^6