Connect the GSHS

시간 제한3초메모리 제한1024 MB

요약
건물 사이에 도로를 추가하면서, A와 B의 최단 경로에서 A의 관리 건물에 가장 가까운 건물 번호를 온라인 xor 인코딩으로 답한다.
난이도

어려움10점 중 9점

유형
유니온 파인드, 트리, BFS, 구현
정답자
아직 제출이 없습니다

문제

대한민국의 명소 경기과학고등학교에는 NN개의 건물이 있으며, 각 건물은 11부터 NN까지 번호가 매겨져 있다. 원래는 건물들 사이를 연결하는 도로가 존재했지만, 서울과학고등학교 학생들이 "Split the GSHS!" 를 외치며 모든 도로를 제거해 버렸다.

이를 보고 분노한 재우는 우현이를 시켜 도로를 다시 건설하려 한다.

도로는 서로 다른 두 건물을 양방향으로 연결한다. 한 건물에서 도로 몇 개를 통해 다른 건물까지 갈 수 있다면, 두 건물이 연결되어 있다고 한다. 이때 두 건물 사이의 거리는 두 건물 사이를 이동하기 위해 지나야 하는 도로 수의 최솟값이다.

어떤 건물과 연결되어 있는 모든 건물 중 번호가 가장 작은 건물을 그 건물의 '관리 건물'이라고 하자. 정의에 따라, 어떤 건물과 연결되어 있는 모든 건물의 관리 건물은 같게 된다.

재우는 우현이에게 QQ번의 명령을 내린다. 명령은 다음 두 가지 유형으로 이루어진다.

  • 11 AA BB: 건물 AA와 BB 사이에 도로를 연결한다. 도로를 연결하기 전, AA와 BB 모두로 이동할 수 있는 건물이 존재하지 않음이 보장된다.
  • 22 AA BB: 건물 AA와 건물 BB가 연결되어 있다면, 두 건물 사이를 최단거리로 이동하기 위해 지나야 하는 건물 (건물 AA와 건물 BB를 포함) 중 건물 AA의 관리 건물과 가장 가까운 건물의 번호를 출력한다. 만약 두 건물이 연결되어 있지 않다면 00을 출력한다.

여러분은 우현이다. 재우의 명령들을 모두 수행해라.

입력

첫 번째 줄에 경기과학고등학교의 건물의 수를 나타내는 정수 NN과 재우가 우현이에게 내리는 명령의 개수 QQ가 공백으로 구분되어 주어진다. 두 번째 줄부터 QQ개의 줄에는 쿼리의 종류를 나타내는 TT와 두 정수 X,YX, Y가 공백을 사이에 두고 주어진다. 이때,

  • A=X⊕A=X \oplus last_ans
  • B=Y⊕B=Y \oplus last_ans

에 대해 명령 TT AA BB를 수행하여라. last_ans는 가장 마지막으로 수행한 2번 명령에서 출력한 값이며, 만약 2번 쿼리를 이전까지 한 번도 수행하지 않았다면 0이다.(⊕\oplus는 배타적 논리합(xor)을 의미한다)

출력

ii번째 줄에 ii번째 2번 쿼리에 대한 정답을 출력한다.

제한

  • 2≤N≤1052 \le N \le 10^5
  • 2≤Q≤5×1052 \le Q \le 5 \times 10^5

예제1

  1. 예제 1

    입력
    7 15
    1 1 7
    2 1 7
    1 7 2
    2 2 7
    1 0 7
    2 7 5
    1 6 5
    2 6 5
    2 0 2
    1 2 5
    2 4 7
    2 2 4
    1 4 0
    2 4 1
    2 3 2
    
    예상 출력
    1
    3
    3
    6
    3
    1
    6
    1
    6