허용된 교환

배열에 교환과 합집합 연산이 가해질 때 정렬 가능 여부를 판정하고, 합치면 두 구름이 모두 좋아지는 구름 쌍의 개수를 센다.

어려움9유니온 파인드구현수학정렬아직 제출이 없습니다시간 제한6초메모리 제한512 MB

문제

도미니크는 양의 정수로 이루어진 배열 p1,,pNp_1, \dots, p_N을 생각했다. 이 배열을 오름차순으로 정렬한 결과를 q1,,qNq_1, \dots, q_N이라고 한다.

도미니크는 허용된 교환의 집합도 함께 생각했다. 쌍 (X,Y)(X, Y)가 허용된 교환의 집합에 들어 있으면, 도미니크는 배열 pp의 위치 XX와 위치 YY에 있는 수를 교환할 수 있다. 처음에 허용된 교환의 집합은 비어 있다.

마린은 도미니크에게 QQ개의 질의를 준다. 각 질의는 다음 네 종류 중 하나다.

  1. 위치 AA와 위치 BB의 수를 교환한다.

  2. (A,B)(A, B)를 허용된 교환의 집합에 추가한다. 마린은 이미 집합에 들어 있는 쌍을 다시 줄 수도 있다.

  3. 허용된 교환만 써서 배열을 정렬할 수 있는지 판정한다. 교환은 임의의 순서로 쓸 수 있고, 같은 교환을 몇 번이든 다시 써도 된다.

  4. 위치 AA에 있는 수를 허용된 교환만 써서 위치 BB로 옮길 수 있으면 두 위치 (A,B)(A, B)가 연결되어 있다고 한다. 위치 AA와 연결된 모든 위치의 집합을 AA의 구름이라고 한다. 어떤 구름에 속한 모든 위치 jj에 대해 pj=qjp_j = q_j가 동시에 성립하도록 허용된 교환을 적용할 수 있으면, 그 구름을 좋은 구름이라고 한다.

    다음 세 조건을 모두 만족하는 서로 다른 두 위치의 쌍 (A,B)(A, B)가 몇 개인지 센다.

    • 위치 AA와 위치 BB는 연결되어 있지 않다.
    • AA의 구름과 BB의 구름이 모두 좋은 구름이 아니다.
    • (A,B)(A, B)를 허용된 교환의 집합에 추가하면, AA의 구름과 BB의 구름이 합쳐져서 생기는 AA의 구름이 좋은 구름이 된다.

(A,B)(A, B)(B,A)(B, A)는 같은 쌍으로 센다.

입력

첫째 줄에 정수 NNQQ가 주어진다 (1N,Q1061 \le N, Q \le 10^6).

둘째 줄에 NN개의 정수 p1,,pNp_1, \dots, p_N이 주어진다 (1pi1061 \le p_i \le 10^6).

다음 QQ개의 줄에 질의가 한 줄에 하나씩 주어진다.

  • 줄의 첫 번째 수는 질의의 종류 TT이고, 1, 2, 3, 4 중 하나다.
  • TT가 1 또는 2이면 그 뒤에 서로 다른 정수 AABB가 온다 (1A,BN1 \le A, B \le N).
  • TT가 3 또는 4이면 그 줄에는 다른 수가 없다.

출력

종류가 3 또는 4인 질의마다 답을 한 줄에 출력한다.

종류 3의 답은 배열을 정렬할 수 있으면 DA, 정렬할 수 없으면 NE이다. 크로아티아어로 각각 예와 아니오를 뜻하며, 따옴표 없이 출력한다.

종류 4의 답은 문제에서 정의한, 음이 아닌 정수 하나다.

힌트

첫 번째 예제에서 p=[1,3,2]p = [1, 3, 2]이고 q=[1,2,3]q = [1, 2, 3]이다. 처음에는 허용된 교환이 하나도 없으므로 각 위치가 자기 자신만으로 이루어진 구름을 이룬다.

첫 번째 질의의 답은 1이다. 세 조건을 모두 만족하는 쌍은 (2,3)(2, 3) 하나뿐이다.

두 번째 질의의 답은 NE이다. 허용된 교환의 집합이 비어 있어서 2와 3을 제자리로 옮길 수 없다.

세 번째 질의로 쌍 (2,3)(2, 3)이 허용된 교환의 집합에 들어간다.

네 번째 질의의 답은 0이다. 위치 2와 위치 3이 이미 연결되어 있다.

다섯 번째 질의의 답은 DA이다. 허용된 교환 (2,3)(2, 3)을 한 번 적용하면 배열이 정렬된다.