spoj#ADAFUROW. Ada and Furrows

Ada and Furrows

As you might already know, Ada the Ladybug is a farmer. She has multiple furrows in which she grows vegetables. She also never grows multiple vegetables of the same kind in the same furrow. Ada sometime palnts a new vegetable, harveest a vegetable or asks for some aspect which two different furrows have in common (described in input).

Input

The first line of input will contain 1 ≤ Q ≤ 3*105, the number of queries.

Each of the next Q lines will contain ? x y: 0 ≤ x, y ≤ 2*104, and ? is one of: + - v ^ ! \ with following meaning:

+: Plants vegetable of kind y to furrow number x (note that there will never be multiple vegetables of the same kind in the same furrow)

-: Harvests vegetable of kind y from furrow number x (note that there will always be a vegetable of that kind)

v: Finds out how many kinds of vegetables there are in furrows x and y.

^: Finds out how many kinds of vegetable are in both furrows (x, y)

!: Find out how many kinds of vegetables are in x and y BUT not in both of them at once.

\: Find out how many kinds of vegetable are in x but not in y

Output

For each query of the last four kinds, output the proper answer.

Example Input

10
+ 1 4
! 0 2
+ 0 2
\ 0 2
^ 0 1
v 2 0
+ 2 4
! 2 0
+ 1 0
! 0 2
Example Output
0
1
0
1
2
2

Example Input

15
+ 0 2
! 0 1
+ 1 1
v 0 1
+ 1 2
! 1 0
! 0 1
+ 0 0
v 0 1
^ 0 1
+ 1 3
\ 1 0
\ 1 0
+ 1 0
- 1 2

Example Output

1
2
1
1
3
1
2
2

Example Input

10
+ 2 1
! 3 1
! 3 1
+ 1 1
\ 2 0
+ 3 1
v 2 3
! 2 3
- 1 1
^ 1 2

Example Output

0
0
1
1
0
0