모험가 길드

아직 제출이 없습니다시간 제한3초메모리 제한1024 MB

문제

1N1 \dots N까지 번호가 차례대로 매겨진 모험가 길드 NN개가 있다. 모험가 길드에는 모험가들이 자유롭게 가입하거나 탈퇴할 수 있다. 처음에는 각각의 길드마다 하나의 동맹이 존재하여, 총 NN개의 동맹이 존재한다.

모험가 길드들은 서로 동맹할 수 있다. 길드 aa와 길드 bb가 동맹하면, 길드 aa가 속한 동맹과 길드 bb가 속한 동맹이 합쳐져 새로운 동맹을 만들게 된다. 모험가 길드들은 사이가 좋아 한번 동맹한 이후 해체되지 않는다.

모험가 길드 본부에서는 두 길드가 처음으로 같은 동맹에 속할 때를 기리기 위한 축하 파티를 개최한다. 축하 파티는 언제든지 개최될 수 있으며, 같은 두 길드끼리 파티를 여러 번 열기도 한다. 축하 파티는 길드 aa와 길드 bb가 처음으로 같은 동맹에 속할 때, 그 동맹에 속한 길드들끼리 진행된다. 예산 선정을 위해 축하 파티에 참여할 인원수를 알아야 된다.

길드 aa와 길드 bb가 처음으로 같은 동맹에 속할 당시의 동맹에 속한 길드들을 g_1,g_2,,g_kg\_1, g\_2, \dots, g\_k 라고 정의하자. f(g_i)f(g\_i)축하 파티를 하는 현재 길드 g_ig\_i에 속한 인원수라고 정의할 때, 참여하는 인원수는 f(g_1)+f(g_2)++f(g_k)f(g\_1) + f(g\_2) + \dots + f(g\_k)이다.

상근이는 모험가 길드 본부에서 명석한 두뇌로 유명하다. 날마다 처리할 일들이 주어지면 빠르게 처리하는 프로그램을 작성하자. 즉 아래의 쿼리를 순서대로 처리하면 된다.

  • 11 ii xx : 모험가 길드 ii에 모험가 xx명이 가입한다. (1iN,1x109)(1 ≤ i ≤ N, 1 ≤ x ≤ 10^9)
  • 22 ii xx : 모험가 길드 ii에서 모험가 xx명이 탈퇴한다. 모험가 길드 ii에 모험가 xx명 이상 있다는 것이 보장된다. (1iN,1x109)(1 ≤ i ≤ N, 1 ≤ x ≤ 10^9)
  • 33 aa bb : 모험가 길드 aabb가 동맹한다. (1a,bN,ab)(1 ≤ a, b ≤ N, a ≠ b)
  • 44 aa bb : 모험가 길드 aabb가 축하 파티를 개최할 때 참여할 인원수를 출력한다. 만약 지금까지 길드 aabb가 같은 동맹에 속한 적이 없었으면 1-1을 출력한다. (1a,bN,ab)(1 ≤ a, b ≤ N, a ≠ b)

입력

첫째 줄에 모험가 길드의 개수 N(2N300,000)N (2 ≤ N ≤ 300\\,000)과 처리해야 될 쿼리 개수 Q(1Q300,000)Q (1 ≤ Q ≤ 300\\,000)이 주어진다.

둘째 줄에 각 모험가 길드의 초기 인원수 G_1,G_2,,G_NG\_1, G\_2, \dots, G\_N이 주어진다. (1G_i109)(1 ≤ G​\_i ≤ 10^9)

셋째 줄부터 QQ개의 줄에 문제에서 제시된 쿼리들이 주어진다.

주어지는 입력은 모두 정수이다.

출력

4번 쿼리마다 정답을 한 줄에 하나씩 출력한다.