#CF2139F. Antiamuny 与滑块移动
Antiamuny 与滑块移动
F. Antiamuny 与滑块移动
时间限制: 每测试 秒
内存限制: 每测试 兆字节
Antiamuny 正在管理一条长度为 的一维轨道上的 个滑块。每个滑块恰好占据一个单位空间,并且初始时位于不同的位置。滑块编号从 到 ,从左到右排列,因此第 个滑块初始位于位置 。
Antiamuny 被给定 个操作。每个操作由两个整数 和 描述。该操作将第 个滑块移动到位置 。然而,如果此移动导致与另一个滑块发生碰撞(即,如果第 个滑块的当前位置与目的地 之间存在任何其他滑块),则该阻碍滑块会沿相同方向被推动一个单位,直到不再与第 个滑块发生碰撞。这可能引发连锁反应,其中一个滑块推动另一个滑块,依此类推,直到所有滑块再次占据不同的位置。
重要的是,注意操作不会改变滑块的相对顺序:左侧第 个滑块将始终保持为左侧第 个滑块。此外,对 的约束确保所有滑块始终保持在轨道上,位置介于 和 之间。
例如,假设初始滑块位置为 。如果将第五个滑块(位于位置 )移动到位置 ,它将推动第四个滑块从 到 ,这又推动第三个滑块从 到 。最终位置变为 。
不幸的是,Antiamuny 忘记了这 个操作的执行顺序。为了恢复结果,他决定独立模拟所有 种可能的操作排列。对于每个长度为 的排列 ,定义 为按照 指定的顺序执行操作后第 个滑块的最终位置。
换句话说,从初始位置 开始,Antiamuny 首先执行第 个操作,然后执行第 个操作,依此类推,直到第 个操作。 的值是该操作序列结束时第 个滑块的位置。
你的任务是:对于每个滑块 ,计算 在所有 个排列 上的总和。由于结果可能很大,对每个总和输出模 的结果。
输入格式
每个测试包含多个测试用例。第一行包含测试用例的数量 。接下来是每个测试用例的描述。
每个测试用例的第一行包含三个整数 $(1 \leq n, q \leq 5 \cdot 10^3,\ n \leq m \leq 10^9)$ — 分别表示滑块数量、轨道长度和操作数量。
第二行包含 个整数 — 每个滑块的初始位置。
接下来 行,每行包含两个整数 和 — 分别表示要移动的滑块索引以及滑块要移动到的位置。
保证所有测试用例的 之和与 之和均不超过 。
输出格式
对于每个测试用例,输出 个整数,其中第 个整数表示 在所有 个排列 上的总和,对 取模。
样例
输入
3
5 10 3
1 3 5 7 9
5 6
2 6
1 4
5 10 5
2 3 5 7 9
1 6
4 7
3 3
5 7
4 9
3 1000000000 3
1 10 253746392
3 100000000
3 1000000000
3 500000000
输出
18 29 35 41 47
340 460 580 930 1090
6 60 199999979
样例解释
在第一个测试用例中:
-
如果操作按顺序 执行:先执行第二个操作(将第 个滑块移动到位置 );然后执行第一个操作(将第 个滑块移动到位置 );最后执行第三个操作(将第 个滑块移动到位置 )。最终滑块位置为 。
-
如果操作按顺序 执行:最终滑块位置为 。
-
如果操作按顺序 执行:最终滑块位置为 。
-
如果操作按顺序 执行:最终滑块位置为 。
-
如果操作按顺序 执行:最终滑块位置为 。
-
如果操作按顺序 执行:最终滑块位置为 。
对于滑块 , 种不同情况下的位置总和为:
对于滑块 ,总和为:
对于滑块 ,总和为:
对于滑块 ,总和为:
对于滑块 ,总和为: