#arc160f. [arc160_f]Count Sorted Arrays

[arc160_f]Count Sorted Arrays

問題文

整数 NNMM 個の整数の組 (a1,b1),(a2,b2),dots,(aM,bM)(a_1, b_1), (a_2, b_2), \\dots, (a_M, b_M) があります。各 ai,bia_i, b_i1leqailtbileqN1 \\leq a_i \\lt b_i \\leq N を満たします。

はじめ、あなたは (1,2,dots,N)(1,2,\\dots,N) の順列を N!N! 種類すべて持っています。
あなたは MM 回の操作を行います。ii 回目の操作は次の通りです。

  • 持っている N!N! 個の順列すべてに対して次の処理を行う。
    • 順列の aia_i 番目の要素と bib_i 番目の要素の値を比較して、前者の方が大きければ両者を swap する。

1leqileqM1 \\leq i \\leq M について、ii 回目の操作を終了した時点で持っている順列のうち昇順にソートされている列の個数を SiS_i とします。
S1,S2,dots,SMS_1, S_2, \\dots, S_M を出力してください。

ただし、入力では (ai,bi)(a_i, b_i) の代わりに整数の組 (xi,yi)(x_i, y_i) が与えられます。
(ai,bi)(a_i, b_i) の値は xi,yi,Si1x_i, y_i, S_{i-1} を用いて次の手順で得ることができます。(便宜上 S0=1S_0 = 1 とします。)

  • ci=((xi+Si1)bmodN)+1c_i = ((x_i + S_{i-1}) \\bmod N) + 1 とする。
  • di=((yi+Si1times2)bmodN)+1d_i = ((y_i + S_{i-1} \\times 2) \\bmod N) + 1 とする。(ここで cineqdic_i \\neq d_i が保証される。)
  • ai=min(ci,di)a_i = \\min(c_i, d_i) とする。
  • bi=max(ci,di)b_i = \\max(c_i, d_i) とする。

制約

  • 2leqNleq152 \\leq N \\leq 15
  • 1leqMleq5times1051 \\leq M \\leq 5 \\times 10^5
  • 1leqailtbileqN1 \\leq a_i \\lt b_i \\leq N
  • 0leqxi,yileqN10 \\leq x_i, y_i \\leq N - 1

入力

入力は以下の形式で標準入力から与えられる。

NN MM x1x_1 y1y_1 x2x_2 y2y_2 vdots\\vdots xMx_M yMy_M

出力

MM 行出力せよ。ii 行目には SiS_i を出力せよ。


入力例 1

2 1
1 1

出力例 1

2

はじめ、持っている順列は (1,2)(1, 2)(2,1)(2, 1) です。
(a1,b1)=(1,2)(a_1, b_1) = (1, 2) です。11 回目の操作を終了した時点で持っている順列は (1,2)(1, 2)22 個になります。よって 22 を出力します。


入力例 2

3 4
0 1
2 1
1 1
0 1

出力例 2

2
4
4
6

(ai,bi)(a_i, b_i) は順に (1,2),(2,3),(1,3),(1,2)(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)(a_i, b_i) は順に (1,2),(3,4),(1,5),(2,3),(4,5)(1, 2), (3, 4), (1, 5), (2, 3), (4, 5) です。