题号:NC316183
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
64bit IO Format: %lld
题目描述

给定整数

,考虑一个长度为

的
排列 
。令

为排列

的第

个前缀

内的
正序对数,即:
%20~%5CBig%5Cvert~%201%5Cleqslant%20i%3Cj%5Cleqslant%20t%2C%5C%20p_i%3Cp_j%5CBig%5C%7D%20%5CBig%5Crvert)

其中,
%20~%5CBig%5Cvert~%20%E6%9D%A1%E4%BB%B6%5CBig%5C%7D%20%5CBig%5Crvert)
表示满足条件的
)
对数。

现在,共有

次询问,每次询问求满足

的
“合法不同排列”的数目。由于答案可能很大,请将答案对

取模后输出。
【名词解释】

长度为

的
排列:由

这

个整数、按任意顺序组成的数组(每个整数均恰好出现一次)。例如,

是一个长度为

的排列,而

和

都不是排列,因为前者存在重复元素,后者包含了超出范围的数。
输入描述:
第一行输入两个整数
,表示排列
的长度、询问次数。

此后

行,第

行输入三个整数
)
,表示第

次询问的排列

的前缀长度、所询问区间。

除此之外,保证单个测试文件中,将

去重后的和不超过

。
输出描述:
在一行上输出
个整数,表示每一次询问的满足条件的“合法不同排列”的数目对
取模后的结果。
示例1
输入
复制
5 6
1 0 2
2 1 1
4 4 8
5 1 10
3 2 2
5 7 10
示例2
输入
复制
10 5
2 0 0
5 2 8
3 1 4
9 8 17
10 0 20
输出
复制
1814400 3326400 3024000 1623370 1319957
示例3
输入
复制
1000000 3
400000 1 800000
51612 5623 100000
5125 52 7566
输出
复制
116453273 215807084 467831332
备注:
在几乎全部的情况下,PyPy 的运行速度优于 Python,我们建议您选择对应版本的 PyPy 进行提交、而不是 Python。