#jag2017summerday3k. [jag2017summer_day3_k]Permutation Period

[jag2017summer_day3_k]Permutation Period

问题描述

你有一个包含 NN 个整数的排列 pp。初始情况下,对于 1iN1 \le i \le N,有 pi=ip_i = i。对于每个 jj1jN1 \le j \le N),记 pj0=jp^0_j = jpjk=ppjk1p^k_j = p^{k-1}_{p_j} 对于任意 k1k \ge 1pp 的"周期"定义为满足对于所有 jj1jN1 \le j \le N),都有 pjk=jp^k_j = j 的最小正整数 kk

给定 QQ 个查询。第 ii 个查询的特征是两个不同的索引 xix_iyiy_i。对于每个查询,交换 pxip_{x_i}pyip_{y_i},然后按照给定的顺序计算更新后的 pp 的周期模 109+710^9 + 7

可以证明 pp 的周期总是存在。

输入

输入是以下格式的单个测试用例。

N Q x1 y1  xQ yQN \ Q \ x_1 \ y_1 \ \vdots \ x_Q \ y_Q

第一行包含两个整数 NNQQ2N105,1Q1052 \le N \le 10^5, 1 \le Q \le 10^5)。(i+1)(i+1)-th 行包含两个整数 xix_iyiy_i1xi,yiN,xiyi1 \le x_i, y_i \le N, x_i \ne y_i)。

输出

对于每个查询,输出一行答案。

样例输入 1

5 4
2 5
2 4
1 3
1 2

样例输出 1

2
3
6
5

pp 的变化如下:$\[1,2,3,4,5\] \to \[1,5,3,4,2\] \to \[1,4,3,5,2\] \to \[3,4,1,5,2\] \to \[4,3,1,5,2\]$。

样例输入 2

2 2
1 2
1 2

样例输出 2

2
1

pp 的变化如下:\[1,2\] \to \[2,1\] \to \[1,2\]

样例输入 3

10 10
5 6
5 9
8 2
1 6
8 1
7 1
2 6
8 1
7 4
8 10

样例输出 3

2
3
6
4
6
7
12
7
8
9