Trạng thái

Cho một đô thị gồm \(n\) đỉnh và chưa có cạnh nào. Bạn phải thực hiện lần lượt \(Q\) thao tác thuộc một trong ba loại sau:

  1. Thêm một cạnh giữa hai đỉnh \(u\)\(v\). Đảm bảo rằng \(u \neq v\) và chưa có cạnh nào giữa \(u\)\(v\).
  2. Xóa một cạnh giữa hai đỉnh \(u\)\(v\). Đảm bảo rằng có cạnh giữa \(u\)\(v\).
  3. Đếm số thành phần liên thông của đồ thị hiện tại.

Hãy trả lời cho mỗi thao tác loại 3.

Dữ liệu vào

  • Dòng đầu chứa hai số nguyên \(N\)\(Q\). (\(1 \le N, Q \le 3\times10^5\))
  • \(K\) dòng tiếp theo, mỗi dòng chứa một trong 3 dạng truy vấn sau:

    • + u v (\(1 \le u \neq v \le N\)): thêm một cạnh giữa \(u\)\(v\).
    • - u v (\(1 \le u \neq v \le N\)): xóa một cạnh giữa \(u\)\(v\).
    • ?: đếm số thành phần liên thông của đồ thị hiện tại.

Dữ liệu ra

  • Với mỗi truy vấn loại 3, in ra số thành phần liên thông của đồ thị hiện tại.

Sample Input

5 11
?
+ 4 5
+ 1 2
+ 2 3
+ 3 4
?
- 2 3
?
- 1 2
+ 1 3
?

Sample Output

5
1
2
2
Thông tin
Thông tin bài tập
Gửi bài giải
Điểm
100
Giới hạn thời gian:
1.5s
Giới hạn bộ nhớ:
500 M
I/O
stdin -> stdout
Tác giả
Loại đề bài
Tổng hợp
Ngôn ngữ cho phép
C, C#, C++, Java, Pascal, Python, Text