You are given a bipartite graph consisting of $$$n_1$$$ vertices in the first part, $$$n_2$$$ vertices in the second part, and $$$m$$$ edges, numbered from $$$1$$$ to $$$m$$$. You have to color each edge into one of two colors, red and blue. You have to minimize the following value: $$$\sum \limits_{v \in V} |r(v) - b(v)|$$$, where $$$V$$$ is the set of vertices of the graph, $$$r(v)$$$ is the number of red edges incident to $$$v$$$, and $$$b(v)$$$ is the number of blue edges incident to $$$v$$$.
Sounds classical and easy, right? Well, you have to process $$$q$$$ queries of the following format:
Note that if an edge was red or blue in some coloring, it may change its color in next colorings.
The hash of the coloring is calculated as follows: let $$$R$$$ be the set of indices of red edges, then the hash is $$$(\sum \limits_{i \in R} 2^i) \bmod 998244353$$$.
Note that you should solve the problem in online mode. It means that you can't read the whole input at once. You can read each query only after writing the answer for the last query. Use functions fflush in C++ and BufferedWriter.flush in Java languages after each writing in your program.
The first line contains three integers $$$n_1$$$, $$$n_2$$$ and $$$m$$$ ($$$1 \le n_1, n_2, m \le 2 \cdot 10^5$$$).
Then $$$m$$$ lines follow, the $$$i$$$-th of them contains two integers $$$x_i$$$ and $$$y_i$$$ ($$$1 \le x_i \le n_1$$$; $$$1 \le y_i \le n_2$$$) meaning that the $$$i$$$-th edge connects the vertex $$$x_i$$$ from the first part and the vertex $$$y_i$$$ from the second part.
The next line contains one integer $$$q$$$ ($$$1 \le q \le 2 \cdot 10^5$$$) — the number of queries you have to process.
The next $$$q$$$ lines contain the queries in the format introduced in the statement.
Additional constraints on the input:
To answer a query of type $$$1$$$, print one integer — the hash of the optimal coloring.
To answer a query of type $$$2$$$, print one line. It should begin with the integer $$$k$$$ — the number of red edges. Then, $$$k$$$ distinct integer should follow — the indices of red edges in your coloring, in any order. Each index should correspond to an existing edge, and the hash of the coloring you produce should be equal to the hash you printed as the answer to the previous query.
If there are multiple answers to a query, you may print any of them.
3 4 2 1 2 3 4 10 1 1 3 1 2 3 2 1 3 3 2 1 2 4 2 1 2 1 1 1 1 2
8 8 1 3 40 2 3 5 104 3 5 6 3 104 360 4 5 6 3 8
Name |
---|