Point: 100.0
Time limit: 1.5s
Memory limit: 500 M
Input: stdin
Output: stdout
Author:  
Problem type

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