아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

순열의 주기

시간 제한5초메모리 제한512 MB

요약
항등 순열에서 시작해 주어진 교환을 차례로 적용하면서, 각 교환 뒤 순열의 주기(모든 사이클 길이의 최소공배수)를 10^9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

유형
수학, 정수론, 유니온 파인드, 구현
정답자
아직 제출이 없습니다

문제

NN개의 정수로 이루어진 순열 pp가 있다. 처음에는 1≤i≤N1 \le i \le N에 대해 pi=ip_i = i이다. 각 j (1≤j≤N)j \ (1 \le j \le N)에 대해 pj0=jp^0_j = j, 그리고 k≥1k \ge 1인 임의의 kk에 대해 pjk=ppjk−1p^k_j = p^{k-1}_{p_j}로 정의하자. pp의 주기는 모든 j (1≤j≤N)j \ (1 \le j \le N)에 대해 pjk=jp^k_j = j를 만족하는 최소 양의 정수 kk이다.

QQ개의 질의가 주어진다. ii번째 질의는 서로 다른 두 인덱스 xix_i와 yiy_i로 주어진다. 각 질의마다 pxip_{x_i}와 pyip_{y_i}를 교환한 뒤 갱신된 pp의 주기를 109+710^9 + 7로 나눈 나머지를 순서대로 계산한다.

pp의 주기는 항상 존재함을 증명할 수 있다.

입력

입력은 다음과 같은 형식의 단일 테스트 케이스로 이루어진다.

$N \ Q$
$x_1 \ y_1$
$\vdots$
$x_Q \ y_Q$

첫째 줄에는 두 정수 NN과 QQ가 주어진다 (2≤N≤105,1≤Q≤1052 \le N \le 10^5, 1 \le Q \le 10^5). (i+1)(i+1)번째 줄에는 두 정수 xix_i와 yiy_i가 주어진다 (1≤xi,yi≤N,xi≠yi1 \le x_i, y_i \le N, x_i \ne y_i).

출력

각 질의마다 답을 한 줄에 하나씩 출력한다.

예제3

  1. 예제 1

    입력
    5 4
    2 5
    2 4
    1 3
    1 2
    
    예상 출력
    2
    3
    6
    5
    
  2. 예제 2

    입력
    2 2
    1 2
    1 2
    
    예상 출력
    2
    1
    
  3. 예제 3

    입력
    10 10
    5 6
    5 9
    8 2
    1 6
    8 1
    7 1
    2 6
    8 1
    7 4
    8 10
    
    예상 출력
    2
    3
    6
    4
    6
    7
    12
    7
    8
    9