题目描述
译自 ROI Regional 2019 Day1 T4. Машинное обучение
在人工智能实验室中,开发了一种新的机器学习方法。在训练过程中,程序会进行 n 次迭代。每次迭代中,训练程序会在某个训练集上运行。
训练集的复杂度从 0 到 k 不等。训练计划由一个整数数组 [a1,a2,…,an] 表示,其中 ai 表示第 i 次迭代中使用的训练集的复杂度。对于所有 i 从 1 到 n,必须满足 0≤ai≤k。
研究发现,训练计划的有效性取决于训练集复杂度的位表示。为了使计划有效,必须满足对于任意两个值 i 和 j,其中 1≤i<j≤n,都有 (aiandaj)=ai。回顾一下,两个非负整数的按位与(and)操作如下:将两个数写成二进制形式,如果两个数的第 i 位都是 1,则结果的第 i 位为 1。例如,$(14 \operatorname{and} 7)=(1110_{2} \operatorname{and} 0111_{2})=110_{2}=6$。
然而,持续使用相同复杂度的训练集不会带来学习进展。为了避免这种情况,训练计划必须满足 m 个要求。每个要求由两个数字 li 和 ri 表示,意味着 ali=ari。
实验室的工作人员希望找到满足所有要求的有效计划的数量。由于这个数量可能非常大,需要计算它除以 109+7 的余数。
编写一个程序,根据给定的整数 n 和 k,以及 m 个要求 li,ri,确定满足所有要求的有效计划的数量,并输出这个数量除以 109+7 的余数。
输入格式
第一行输入包含三个整数 n, m, k $(1 \leq n \leq 3 \cdot 10^{5}, 0 \leq m \leq 3 \cdot 10^{5}, 0 \leq k \leq 10^{18})$,分别表示训练迭代次数、要求数量和训练集的最大复杂度。
接下来的 m 行描述了要求,第 i 行包含两个整数 li,ri (1≤li<ri≤n),表示 ali=ari。保证所有要求都是不同的。
输出格式
输出一个整数,表示满足所有要求的有效计划的数量除以 109+7 的余数。
样例 1
输入
2 0 3
输出
9
第一个样例的所有可能计划:$[0,0],[0,1],[0,2],[0,3],[1,1],[1,3],[2,2],[2,3],[3,3]$。
样例 2
输入
3 1 2
1 2
输出
2
第二个样例的可能计划:[0,1,1],[0,2,2]。
数据范围与提示
详细子任务附加限制及分值如下表所示。
| 子任务 |
分值 |
附加限制 |
子任务依赖 |
| 1 |
8 |
1≤n≤500, m=0, 0≤k≤500 |
|
| 2 |
20 |
1≤n≤3⋅105, m=0, 0≤k≤107 |
1 |
| 3 |
10 |
1≤n≤3⋅105, m=0, 0≤k≤1018 |
1,2 |
| 4 |
8 |
1≤n≤50, 0≤m≤50, 0≤k≤50 |
|
| 5 |
16 |
1≤n≤2000, 0≤m≤2000, 0≤k≤107 |
1,4 |
| 6 |
1≤n≤2000, 0≤m≤2000, 0≤k≤1018 |
1,4,5 |
| 7 |
10 |
1≤n≤3⋅105, 0≤m≤200, 0≤k≤107 |
1,2,4 |
| 8 |
6 |
1≤n≤3⋅105, 0≤m≤200, 0≤k≤1018 |
1,2,3,4,7 |
| 9 |
16 |
1≤n≤3⋅105, 0≤m≤3⋅105, 0≤k≤1018 |
|