Hide

Problem C
Almost Union-Find

I hope you know the beautiful Union-Find structure. In this problem, you’re to implement something similar, but not identical. The data structure you need to write is also a collection of disjoint sets, supporting 3 operations:

$1\ p\ q$

Union the sets containing $p$ and $q$. If $p$ and $q$ are already in the same set, ignore this command.

$2\ p\ q$

Move $p$ to the set containing $q$. If $p$ and $q$ are already in the same set, ignore this command

$3\ p$

Return the number of elements and the sum of elements in the set containing $p$.

Initially, the collection contains $n$ sets: $\{ 1\} , \{ 2\} , \{ 3\} , \ldots , \{ n\} $.

As an example, consider the sequence of operations in sample input 1 below.

  • Initially: $\{ 1\} , \{ 2\} , \{ 3\} , \{ 4\} , \{ 5\} $

  • Collection after operation 1 1 2: $\{ 1,2\} , \{ 3\} , \{ 4\} , \{ 5\} $

  • Collection after operation 2 3 4: $\{ 1,2\} , \{ 3,4\} , \{ 5\} $ (we omit the empty set that is produced when taking out $3$ from $\{ 3\} $)

  • Collection after operation 1 3 5: $\{ 1,2\} , \{ 3,4,5\} $

  • Collection after operation 2 4 1: $\{ 1,2,4\} , \{ 3,5\} $

Input

There are several test cases. Each test case begins with a line containing two integers $n$ and $m$ ($1 \leq n,m \leq 100\, 000$), the number of integers, and the number of commands. Each of the next $m$ lines contains a command. For every operation, $1\leq p,q\leq n$. The input is terminated by end-of-file (EOF). There are at most $20$ cases, and the size of the input file does not exceed $5$ MB.

Output

For each type-$3$ command, output $2$ integers: the number of elements and the sum of elements.

Sample Input 1 Sample Output 1
5 7
1 1 2
2 3 4
1 3 5
3 4
2 4 1
3 4
3 3
3 12
3 7
2 8

Please log in to submit a solution to this problem

Log in