题目描述
给定一个整数 N 和 M 个整数对 (a1,b1),(a2,b2),…,(aM,bM)。每个 ai,bi 满足 1≤ai<bi≤N。
一开始,你拥有 (1,2,…,N) 的所有 N! 种排列。
你将进行 M 次操作。第 i 次操作如下:
- 对你拥有的所有 N! 个排列,进行如下处理:
- 比较排列中第 ai 个元素和第 bi 个元素的值,如果前者更大,则交换两者。
对于 1≤i≤M,记第 i 次操作结束后你拥有的排列中,已经按升序排列的序列的个数为 Si。
请输出 S1,S2,…,SM。
不过,输入中给出的并不是 (ai,bi),而是整数对 (xi,yi)。
(ai,bi) 的值需要通过 xi,yi,Si−1 按如下步骤计算得到(其中 S0=1):
- ci=((xi+Si−1)modN)+1。
- di=((yi+Si−1×2)modN)+1。(保证 ci=di)
- ai=min(ci,di)。
- bi=max(ci,di)。
输入格式
输入以如下格式从标准输入读入。
N M x1 y1 x2 y2 ⋯ xM yM
输出格式
输出 M 行。第 i 行输出 Si。
样例 1
输入
2 1
1 1
输出
2
样例 2
输入
3 4
0 1
2 1
1 1
0 1
输出
2
4
4
6
样例 3
输入
5 5
4 4
0 4
1 1
2 4
1 2
输出
2
4
4
8
16
说明/提示
数据范围
- 2≤N≤15
- 1≤M≤5×105
- 1≤ai<bi≤N
- 0≤xi,yi≤N−1
样例解释 1
一开始拥有的排列为 (1,2) 和 (2,1)。(a1,b1)=(1,2)。第 1 次操作后拥有的排列为 (1,2) 共 2 个。因此输出 2。
样例解释 2
(ai,bi) 依次为 (1,2),(2,3),(1,3),(1,2)。
样例解释 3
(ai,bi) 依次为 (1,2),(3,4),(1,5),(2,3),(4,5)。
由 ChatGPT 4.1 翻译