Recently, Ray has been building a map of his many lovers and he has been getting curious about the routes he can take to their houses.
The map can be represented by a directed graph of vertices and edges, but as his map of lovers is constantly changing, he also wants to perform queries on it. Each query is of one of two types:
? x
: Output whether node (His lover) is currently reachable from node (Ray's house).+ x y
: Add a directed edge from node to node . Note that such an edge may already exist in the graph.
Ray tried to write a program to help him earlier, but he found that it was too slow. Can you help him do better?
Note: Special thanks to
for some extra test cases.Constraints
Subtask 1 [15%]
There are no queries of type + x y
.
Subtask 2 [85%]
No additional constraints.
Input Specification
The first line contains the integers .
The next lines each contain the integers a b
, representing a directed edge from node to in the initial graph.
The last lines each contain a query of one of the above described types.
Output Specification
For each query of the ?
type, output YES
if node is reachable and NO
if not.
Sample Input
10 2 10
2 3
1 2
? 2
? 5
+ 3 5
+ 4 6
? 6
+ 3 4
? 6
? 4
+ 8 5
? 8
Sample Output
YES
NO
NO
YES
YES
NO
Comments