트리 병합
시간 제한2초메모리 제한1024 MB
초기 루트 트리와 최종 트리가 주어졌을 때, 초기 트리를 최종 트리로 만드는 형제 노드 병합 연산 순서를 출력합니다.
문제
베시 소는 그래프 알고리즘 수업을 막 마치고 자신만의 그래프 시각화 프로그램을 만들기 시작했다. 현재 이 프로그램은 값이 서로 다른 노드로 이루어진 루트가 있는 트리만 시각화할 수 있고, 수행할 수 있는 연산은 병합 한 가지뿐이다.
병합 연산은 같은 부모를 가진 서로 다른 두 노드를 골라 하나의 노드로 합친다. 합쳐진 노드의 값은 두 노드 값 중 최댓값이고, 자식은 병합된 노드들이 가진 모든 자식의 합집합이다 (자식이 있는 경우에 한함).
베시는 트리에 병합 연산을 몇 번 수행한 뒤 프로그램이 비정상 종료되었고, 연산 기록을 잃어버렸다. 기억나는 것은 처음 트리와 모든 병합을 마친 뒤의 트리뿐이다. 초기 트리와 최종 트리가 주어졌을 때, 베시가 수행했을 수 있는 병합 연산의 순서를 구하라. 그러한 순서가 존재함은 보장된다.
입력
각 입력은 () 개의 독립된 테스트 케이스로 구성된다. 모든 테스트 케이스에 걸친 의 합은 을 넘지 않는다.
첫 줄에 가 주어진다. 각 테스트 케이스는 초기 트리의 노드 개수 ()을 적은 줄로 시작하며, 노드의 값은 이다. 이어지는 개의 줄에는 정수 와 ()가 공백으로 구분되어 주어지며, 초기 트리에서 값이 인 노드가 값이 인 노드의 자식이라는 뜻이다.
다음 줄에는 최종 트리의 노드 개수 ()이 주어진다. 이어지는 개의 줄에는 위와 같은 형식으로 최종 트리를 나타내는 정수 와 ()가 주어진다.
출력
각 테스트 케이스마다 병합 연산의 횟수를 출력하고, 이어서 연산을 수행한 순서대로 한 줄에 하나씩 출력한다. 각 연산은 병합할 두 노드의 값을 공백으로 구분한 서로 다른 두 정수이며, 순서는 상관없다.
해가 여러 개라면 그중 아무것이나 출력해도 된다.