치노와 코코아
시간 제한2초메모리 제한1024 MB
높이가 10 이하인 트리에 floor(N^2/5)개 이상의 간선을 더해 그래프를 만들고, 반대 실행에서는 그 그래프만 보고 원래 트리를 복원한다.
문제
이 문제는 한 번 채점할 때 참가자의 프로그램을 번 실행하는 형식의 문제이다. 각 실행은 일반적인 문제와 같이 진행된다.
치노와 코코아는 리제의 훈련을 받고 있다. 그 훈련은 다음과 같이 구성된다.
- 치노에게 정점이 개인 트리가 주어진다. 트리의 정점에는 부터 까지의 정수 번호가 붙어있으며, 트리의 루트는 번 정점이다. 트리의 높이는 을 넘지 않는다. 트리의 높이는 루트에서 어떤 정점까지의 경로에 포함된 간선의 개수의 최댓값이다.
- 치노는 정수 ()를 원하는 수로 정한 뒤 개의 간선을 트리에 추가하여 그래프를 만든다. 추가하는 간선은 기존의 트리에 존재하지 않아야 하며, 간선을 추가한 후의 그래프는 중복 간선을 가지면 안 된다.
- 코코아에게는 치노가 만든 그래프와 가 주어진다. 그래프의 간선은 정렬되어 주어지며, 자세한 사항은 입력 형식에 설명되어 있다.
- 코코아는 치노가 처음에 받은 트리가 무엇인지 알아내야 한다.
치노와 코코아가 리제의 훈련을 무사히 마칠 수 있도록 도와주자!
입력
첫 번째 줄에는 입력의 종류를 나타내는 정수 ()가 주어진다.
인 경우 두 번째 줄부터 치노의 입력이 주어진다. 치노의 입력의 첫 번째 줄에는 트리의 정점 개수를 나타내는 정수 ()이 주어진다. 그다음 줄부터 개의 줄에 트리의 간선이 연결하는 두 정점을 나타내는 정수 와 (, )가 각각 주어진다.
인 경우 두 번째 줄부터 코코아의 입력이 주어진다. 코코아의 입력의 첫 번째 줄에는 정수 과 ()가 주어진다. 은 치노가 받은 트리의 정점 개수이고, 는 치노가 추가한 간선의 개수이다. 그다음 줄부터 개의 줄에 그래프의 간선이 연결하는 두 정점을 나타내는 정수 와 ()가 각각 주어진다. 각 간선은 를 만족하도록 연결하는 두 정점의 순서가 조정되어 주어진다. 간선 사이의 순서는 에 대해 오름차순으로, 만약 가 같다면 에 대해 오름차순으로 주어진다.
출력
치노의 입력 ()에서, 치노는 첫 번째 줄에 하나의 정수 를 출력해야 한다. 이 값은 이상이어야 한다. 두 번째 줄부터 개의 줄에 치노가 추가할 간선이 연결하는 두 정점을 나타내는 정수 와 (, )를 각각 출력해야 한다. 출력하는 간선은 치노가 처음에 받은 트리에 존재하지 않는 간선이어야 하며, 중복되지 않아야 한다.
코코아의 입력 ()에서, 코코아는 첫 번째 줄부터 개의 줄에 치노에게 주어진 트리의 간선들이 연결하는 두 정점의 번호 와 (, )를 각각 출력해야 한다. 출력하는 간선들은 중복되어서는 안 되며, 원래 트리에 간선 가 있었다면 출력에 혹은 가 존재해야 한다.