#L4252. 「NordicOI 2018」Mysterious Array

「NordicOI 2018」Mysterious Array


题目描述

题目译自 NordicOI 2018 T3「Mysterious Array」

有一个数组,包含数字 11NN 的一个排列(即每个数字在数组中恰好出现一次)。数组的元素是从 11 开始编号的。

不过,你并不知道数组的具体内容。相反,你得到了 QQ 个查询的结果,每个查询的形式是「位置 aabb 之间的最小值是多少?」

你的任务是计算有多少个数组符合这些查询条件。


输入格式

第一行输入包含两个整数 NNQQ,表示数组的大小和查询的数量。

接下来有 QQ 行,每行包含三个整数 a,b,xa, b, x (1abN,1xN)(1 \le a \le b \le N, 1 \le x \le N),表示位置 aabb 之间的最小值是 xx

注意,查询结果可能不一致,可能没有任何数组符合这些条件。


输出格式

输出一个整数,表示符合查询条件的数组数量,结果对 109+710^9+7 取模。


样例 1

输入

3 2
1 2 2
1 3 1

输出

2

解释
在第一个样例中,有一个大小为 33 的数组,包含数字 112233 的排列。此外,给出了位置 1122 之间的最小值是 22,以及位置 1133 之间(即整个数组)的最小值是 11。只有两个数组符合这些条件:[2,3,1][2,3,1][3,2,1][3,2,1]


样例 2

输入

8 3
3 7 2
6 8 2
4 5 5

输出

576

解释
在第二个样例中,有 576576 个数组符合给定的条件。


数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务 分值 附加限制
1 23 1N,Q101 \leq N,Q \leq 10
2 35 1N,Q10001 \leq N,Q \leq 1000
3 42 1N,Q21051 \leq N,Q \leq 2\cdot 10^5