Crying 与排列
题号:NC264866
时间限制:C/C++/Rust/Pascal 6秒,其他语言12秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld

题目描述

Crying 正在数排列。

Crying 给了你  组询问,每组询问给定两个正整数 ,你需要告诉 Crying 有多少个长度为  的排列  满足如下条件:

  • 恰好存在  个位置  满足  且 

答案对  取模。

另外,Crying 会在所有询问之前告诉你所有询问中  的最大值和  的最大值。

输入描述:

第一行三个整数 ,表示询问次数、 和 

接下来  行,每行两个整数 ,意义如题意所示。

对于所有数据,r+m \le 5 \times 10^5

输出描述:

 行,每行一个整数,表示答案对  取模的值。
示例1

输入

复制
2 5 1
3 1
5 2

输出

复制
2
16

说明

对于第一组询问,满足条件的排列为  和 ,共 2 个


对于第二组询问,满足条件的排列为

\begin{array}{llll}<br />(1,3,2,5,4), &(1,4,2,5,3), &(1,4,3,5,2), &(1,5,2,4,3), \\<br />(1,5,3,4,2), &(2,3,1,5,4), &(2,4,1,5,3), &(2,4,3,5,1), \\<br />(2,5,1,4,3), &(2,5,3,4,1), &(3,4,1,5,2), &(3,4,2,5,1), \\<br />(3,5,1,4,2), &(3,5,2,4,1), &(4,5,1,3,2), &(4,5,2,3,1)<br />\end{array}

共  个。
示例2

输入

复制
3 10 8
8 1
9 1
10 1

输出

复制
126
254
510