配点 : 900 点
問題文
整数 N と M 個の整数の組 (a1,b1),(a2,b2),…,(aM,bM) があります。各 ai,bi は 1≤ai<bi≤N を満たします。
はじめ、あなたは (1,2,…,N) の順列を N! 種類すべて持っています。
あなたは M 回の操作を行います。i 回目の操作は次の通りです。
- 持っている N! 個の順列すべてに対して次の処理を行う。- 順列の ai 番目の要素と bi 番目の要素の値を比較して、前者の方が大きければ両者を swap する。
- 順列の ai 番目の要素と bi 番目の要素の値を比較して、前者の方が大きければ両者を swap する。
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) とする。
制約
- 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 を出力せよ。
2 1
1 1
2
はじめ、持っている順列は (1,2) と (2,1) です。
(a1,b1)=(1,2) です。1 回目の操作を終了した時点で持っている順列は (1,2) が 2 個になります。よって 2 を出力します。
3 4
0 1
2 1
1 1
0 1
2
4
4
6
(ai,bi) は順に (1,2),(2,3),(1,3),(1,2) です。
5 5
4 4
0 4
1 1
2 4
1 2
2
4
4
8
16
(ai,bi) は順に (1,2),(3,4),(1,5),(2,3),(4,5) です。