After discovering planets, numbered from to , the Pharaohs have started to build a transportation system between them by one-way teleporters. Each teleporter has a starting planet and an ending planet. When a tourist uses a teleporter in the starting planet, the tourist is teleported to the ending planet. Note that the starting and ending planet of a teleporter may be the same. A teleporter with its starting planet and ending planet is denoted by .
To encourage widespread use of the teleportation system, the Pharaohs have created a game that can be played by tourists while travelling with the transportation system. A tourist can start the game from any planet. The planets () are called special planets. Every time a tourist enters a special planet, the tourist gets a stamp.
Currently, for each (), there is a teleporter . These teleporters are called starting teleporters.
New teleporters are added one by one. As new teleporters are added, it may become possible for a tourist to get an infinite number of stamps. To be precise, this happens when there is a sequence of planets satisfying the following conditions:
- For each (), there is a teleporter .
Note that a tourist can use starting teleporters and any teleporters that have been added so far.
Your task is to help the Pharaohs verify, after the addition of each teleporter, whether a tourist can get an infinite number of stamps or not.
Implementation Details
You should implement the following procedures:
void init(int n, int k)
- : the number of planets.
- : the number of special planets.
- This procedure is called exactly once, before any calls to
add_teleporter
.
int add_teleporter(int u, int v)
- and : the starting and the ending planet of the added teleporter.
- This function is called at most times (for the value of , see Constraints).
- This function should return if, after the teleporter is added, the tourist can get infinite number of stamps. Otherwise, this function should return .
- Once this function returns , your program will be terminated.
Examples
Example 1
Consider the following call:
init(6, 3)
In this example, there are planets and special planets. The planets , , and are special planets. The starting teleporters are and .
Suppose that the grader calls:
add_teleporter(3, 4)
: You should return .add_teleporter(5, 0)
: You should return .add_teleporter(4, 5)
: You should return .add_teleporter(5, 3)
: You should return .add_teleporter(1, 4)
: At this point, it is possible to get an infinite number of stamps. For example, the tourist starts in the planet , goes to the planets in this order. Hence, you should return , and your program will be terminated.
The following figure illustrates this example.
The special planets and the starting teleporters are shown in bold.
Teleporters added by add_teleporter
are labeled from through , in order.
Example 2
Consider the following call:
init(4, 2)
In this example, there are planets and special planets. The planets and are special planets. The starting teleporter is .
Suppose that the grader calls:
add_teleporter(1, 1)
: after adding the teleporter , it is possible to get an infinite number of stamps. For example, the tourist starts in the planet , and enters the planet infinitely many times using the teleporter . Hence, you should return , and your program will be terminated.
Another sample input / output is available in the attachment package.
Constraints
For each call to the add_teleporter
procedure:
- and
- There is no teleporter from the planet to the planet before adding the teleporter .
Scoring
Subtask | Score | Constraints |
---|---|---|
, , | ||
, | ||
, | ||
, , | ||
No additional constraints |
Sample Grader
The sample grader reads the input in the following format:
- line :
- line ():
The sample grader first calls init
, and then add_teleporter
for and for in order.
It prints the index of the first call to add_teleporter
which returns (which is between and , inclusive), or if all calls to add_teleporter
return .
If some call to add_teleporter
returns an integer other than or , the sample grader prints and your program is terminated immediately.
Comments