모험가 길드
면접 대비시간 제한3초메모리 제한1024 MB
길드를 같은 연합으로 묶고 모험가 수를 바꾸는 질의를 처리하며, 두 길드가 같은 연합이면 그 연합의 모험가 총합을 구합니다.
문제
1부터 까지 번호가 차례대로 매겨진 모험가 길드 개가 있다. 모험가는 길드에 자유롭게 가입하거나 탈퇴할 수 있다. 처음에는 각 길드가 하나씩 동맹을 이루고 있으므로, 동맹은 총 개이다.
길드 와 길드 가 동맹하면, 길드 가 속한 동맹과 길드 가 속한 동맹이 합쳐져 새로운 동맹이 된다. 길드들은 사이가 좋아서 한번 맺은 동맹은 해체되지 않는다.
모험가 길드 본부는 두 길드가 처음으로 같은 동맹에 속하게 될 때마다 이를 기리는 축하 파티를 연다. 축하 파티는 언제든지 열 수 있으며, 같은 두 길드가 파티를 여러 번 열기도 한다. 길드 와 길드 의 축하 파티에는 두 길드가 처음으로 같은 동맹에 속했을 때 그 동맹에 속한 길드들이 참여한다. 예산을 정하려면 파티에 참여할 인원수를 알아야 한다.
그 시점에 동맹에 속한 길드들을 라고 하자. 를 축하 파티를 여는 현재 길드 에 속한 인원수라고 할 때, 참여 인원수는 이다.
다음 쿼리를 순서대로 처리한다.
- : 모험가 길드 에 모험가 명이 가입한다. (, )
- : 모험가 길드 에서 모험가 명이 탈퇴한다. 모험가 길드 에 모험가 명 이상 있다는 것이 보장된다. (, )
- : 모험가 길드 와 가 동맹한다. (, )
- : 지금 길드 와 가 축하 파티를 열 때 참여할 인원수를 출력한다. 지금까지 길드 와 가 같은 동맹에 속한 적이 없으면 을 출력한다. (, )
입력
첫째 줄에 모험가 길드의 개수 ()과 처리할 쿼리의 개수 ()이 주어진다.
둘째 줄에 각 모험가 길드의 초기 인원수 이 주어진다. ()
셋째 줄부터 개의 줄에 위에서 제시한 쿼리가 주어진다.
입력은 모두 정수이다.
출력
4번 쿼리마다 정답을 한 줄에 하나씩 출력한다.