题目描述
给定整数 N 和 M,以及 M 对整数:(a1,b1),(a2,b2),…,(aM,bM)。每对 (ai,bi) 满足 1≤ai<bi≤N。
初始时,有 N! 种排列 (1,2,…,N)。
你将进行 M 个操作,第 i 个操作如下。
- 对于你的每一种排列,执行以下步骤:
- 比较第 ai 个和第 bi 个元素。如果前者较大,则交换这两个元素。
对于每个 1≤i≤M,令 Si 表示第 i 个操作结束后,按升序排列的你的排列数。
输出 S1,S2,…,SM。
输入中给出的是整数对 (xi,yi),而不是 (ai,bi)。
可以根据 xi、yi 和 Si−1 计算出 (ai,bi) 的值。 (为了方便,取 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)。
约束条件
- 2≤N≤15
- 1≤M≤5×105
- 1≤ai<bi≤N
- 0≤xi,yi≤N−1
输入
从标准输入读入数据,数据格式如下:
N M
x1 y1
x2 y2
⋮
xM yM
输出
输出 M 行,第 i 行应包含 Si。
示例输入 1
2 1
1 1
示例输出 1
2
初始时有排列 (1,2) 和 (2,1)。
我们有 (a1,b1)=(1,2)。在第一个操作结束时,你有两个 (1,2) 的副本,所以应打印 2。
示例输入 2
3 4
0 1
2 1
1 1
0 1
示例输出 2
2
4
4
6
按顺序,(ai,bi) 为 (1,2),(2,3),(1,3),(1,2)。
示例输入 3
5 5
4 4
0 4
1 1
2 4
1 2
示例输出 3
2
4
4
8
16
按顺序,(ai,bi) 为 (1,2),(3,4),(1,5),(2,3),(4,5)。