CSES - HIIT Open 2018 - Knobs
  • Time limit: 2.00 s
  • Memory limit: 512 MB
You have a graph with $n$ nodes and $m$ edges. Each node has a knob that you can turn clockwise or counterclockwise. Each knob can be in one of three positions: 0°, 120°, 240°. Initially, knob $i$ is in position $a_i$.

For each knob $i$ you also know its final position, $b_i$. You will need to find a way to turn knobs so that:
  • in each step you turn only one knob (from one position to another position)
  • two knobs that are connected by an edge are never in the same position
  • after you are done, each knob is in its final position
Note that you can turn the same knob many times, to any of the positions.


The first input line has two integers $n$ and $m$: the number of knobs and edges.

Then there are $n$ lines, each with two numbers $a_i$ and $b_i$. These indicate the current position $a_i$ and the final position $b_i$ of knob $i$.

Finally, there are $m$ lines, each with two numbers $i$ and $j$. This indicates that there is an edge between nodes $i$ and $j$; here $1 \le i < j \le n$.

The input configuration and the final configuration are valid: if there is an edge between knobs $i$ and $j$, then $a_i \ne a_j$ and $b_i \ne b_j$.

All inputs are such that if a solution exists, there is at least one solution with at most $10^5$ steps.


If there is a way to turn knobs so that you can reach the final configuration, print a sequence that shows how to do it. First print one line with a number $s$ (at most $5 \cdot 10^5$): the number of steps. Then print $s$ lines, each with a pair of numbers, $x_k$ and $p_k$: in step $k$ you turn knob $x_k$ to position $p_k$. Here $1 \le x_k \le n$ and $p_k$ is 0, 120, or 240.

If there is no way to solve the problem, print only one line with value $-1$.

  • $1 \le n \le 20000$
  • $1 \le m \le 20000$

4 4
0 0
120 240
240 120
120 240
1 2
2 3
3 4
1 4

3 0
4 240
2 240
3 120

The following illustration shows the solution with four steps. Here 0° points up, 120° down right and 240° down left.