Gửi bài giải

Điểm: 0,01 (OI)
Giới hạn thời gian: 2.0s
Giới hạn bộ nhớ: 64M
Input: stdin
Output: stdout

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C++, Go, Java, Kotlin, Pascal, PyPy, Python, Rust, Scratch

Cho một cây có ~n~ đỉnh. Ban đầu không có cạnh nào, mỗi đỉnh là gốc của chính đỉnh đó.

Bạn cần thực hiện hai loại truy vấn sau:

~\scriptsize \bullet~ Gốc ~a~ trở thành con của gốc ~b~ (và không còn là gốc nữa),

~\scriptsize \bullet~ Cho một node ~c~, in ra khoảng cách từ ~c~ đến gốc của nó.

Với truy vấn thứ hai, nếu ~c~ là gốc thì kết quả sẽ bằng 0, ngược lại kết quả sẽ là một số nguyên dương — độ "sâu" của node đó.

Viết chương trình giải quyết các truy vấn trên.

Input

Dòng đầu chứa hai số nguyên ~n~ và ~m~ ~(1 \leq n, m \leq 3 \cdot 10^5)~ — số lượng đỉnh và số lượng truy vấn tương ứng.

~m~ dòng tiếp theo chứa các truy vấn. Truy vấn thứ nhất có dạng "~\texttt{1}~ ~a~ ~b~" ~(1 \leq a \neq b \leq n)~, trong đó ~a~ và ~b~ đều là các gốc. Truy vấn thứ hai có dạng "~\texttt{2}~ ~c~" ~(1 \leq c \leq n)~.

Output

Với mỗi truy vấn loại hai, in ra kết quả trên một dòng.

Scoring

Subtask Điểm Giới hạn
~1~ ~30~ ~1 \leq n \le 5 \cdot 10 ^ 3, 1 \leq m \leq 10 ^ 4~
~2~ ~70~ Không có ràng buộc gì thêm

Sample Input 1

10 20
1 9 4
1 2 6
2 10
1 10 5
2 5
1 7 4
1 8 5
2 1
1 6 5
1 3 5
1 1 4
1 5 4
2 7
2 2
2 4
2 3
2 4
2 2
2 2
2 10

Sample Output 1

0
0
0
1
3
0
2
0
3
3
2

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.