만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

트리 병합

시간 제한2초메모리 제한1024 MB

요약
초기 루트 트리와 최종 트리가 주어졌을 때, 초기 트리를 최종 트리로 만드는 형제 노드 병합 연산 순서를 출력합니다.
난이도

어려움10점 중 8점

유형
트리, DFS, 그리디
정답자
아직 제출이 없습니다

문제

베시 소는 그래프 알고리즘 수업을 막 마치고 자신만의 그래프 시각화 프로그램을 만들기 시작했다. 현재 이 프로그램은 값이 서로 다른 노드로 이루어진 루트가 있는 트리만 시각화할 수 있고, 수행할 수 있는 연산은 병합 한 가지뿐이다.

병합 연산은 같은 부모를 가진 서로 다른 두 노드를 골라 하나의 노드로 합친다. 합쳐진 노드의 값은 두 노드 값 중 최댓값이고, 자식은 병합된 노드들이 가진 모든 자식의 합집합이다 (자식이 있는 경우에 한함).

베시는 트리에 병합 연산을 몇 번 수행한 뒤 프로그램이 비정상 종료되었고, 연산 기록을 잃어버렸다. 기억나는 것은 처음 트리와 모든 병합을 마친 뒤의 트리뿐이다. 초기 트리와 최종 트리가 주어졌을 때, 베시가 수행했을 수 있는 병합 연산의 순서를 구하라. 그러한 순서가 존재함은 보장된다.

입력

각 입력은 TT (1≤T≤1001 \le T \le 100) 개의 독립된 테스트 케이스로 구성된다. 모든 테스트 케이스에 걸친 NN의 합은 10001000을 넘지 않는다.

첫 줄에 TT가 주어진다. 각 테스트 케이스는 초기 트리의 노드 개수 NN (2≤N≤10002 \le N \le 1000)을 적은 줄로 시작하며, 노드의 값은 1…N1 \dots N이다. 이어지는 N−1N-1개의 줄에는 정수 viv_i와 pip_i (1≤vi,pi≤N1 \le v_i, p_i \le N)가 공백으로 구분되어 주어지며, 초기 트리에서 값이 viv_i인 노드가 값이 pip_i인 노드의 자식이라는 뜻이다.

다음 줄에는 최종 트리의 노드 개수 MM (2≤M≤N2 \le M \le N)이 주어진다. 이어지는 M−1M-1개의 줄에는 위와 같은 형식으로 최종 트리를 나타내는 정수 viv_i와 pip_i (1≤vi,pi≤N1 \le v_i, p_i \le N)가 주어진다.

출력

각 테스트 케이스마다 병합 연산의 횟수를 출력하고, 이어서 연산을 수행한 순서대로 한 줄에 하나씩 출력한다. 각 연산은 병합할 두 노드의 값을 공백으로 구분한 서로 다른 두 정수이며, 순서는 상관없다.

해가 여러 개라면 그중 아무것이나 출력해도 된다.

예제1

  1. 예제 1

    입력
    1
    8
    7 5
    2 1
    4 2
    5 1
    3 2
    8 5
    6 2
    4
    8 5
    5 1
    6 5
    
    예상 출력
    4
    2 5
    4 8
    3 8
    7 8