메뚜기 경로
시간 제한1초메모리 제한512 MB
트리와 두 정점 s, t가 주어질 때, 경로 성분에 대한 재귀 규칙으로 정의된 특정 그래슈퍼 경로를 구성한다.
문제
메뚜기 한 마리가 트리를 탐험하려고 한다. 트리는 어떤 두 정점도 정확히 하나의 경로로 이어진 무향 그래프다. 트리의 한 정점에 있는 메뚜기는 거리가 이하인 다른 정점으로만 뛸 수 있다. 두 정점의 거리는 두 정점을 잇는 경로에 있는 간선의 수다. 메뚜기는 지금 있는 정점 에서 출발해 원하는 정점 에서 끝나도록, 트리의 모든 정점을 정확히 한 번씩 방문하려고 한다.
정점이 개인 트리와 두 정점 , 가 주어진다. 와 의 메뚜기 경로는 트리의 모든 정점을 나열한 순서 중에서 , 이고 의 모든 에 대해 메뚜기가 에서 로 뛸 수 있는 것을 말한다. 트리의 어떤 두 정점을 골라도 메뚜기 경로가 존재한다는 사실은 1960년에 증명되었다.
아래 그림의 트리에서 , 일 때 은 메뚜기 경로다. 정점 와 정점 의 거리는 이므로 메뚜기는 에서 로 뛸 수 있지만, 에서 으로는 뛰지 못한다. 메뚜기 경로는 여러 개일 수 있으므로 출력에서 그중 하나를 정해 둔다.

그림: 에서 으로 가는 메뚜기 경로 하나.
입력
첫 줄에 트리의 정점 수 이 주어진다 (). 다음 개의 줄에는 각각 두 정수 와 가 주어지며, 정점 와 정점 를 잇는 간선을 뜻한다. 정점에는 부터 까지 번호가 붙어 있다. 마지막 줄에는 서로 다른 두 정수 와 가 주어진다. 각각 메뚜기 경로의 시작 정점과 끝 정점이다.
출력
메뚜기 경로는 여러 개일 수 있으므로, 다음 규칙이 정하는 경로 하나를 출력한다. 메뚜기가 지나는 정점을 순서대로 개의 줄에 한 정점씩 출력한다.
- 에서 로 가는 유일한 경로를 라고 하자.
- 이 경로의 간선 개를 트리에서 지우면 트리가 개의 컴포넌트로 나뉜다. 가 들어 있는 컴포넌트를 라 하고, 는 를 루트로 삼는다.
- 루트가 정해진 트리의 정점 에 대해 수열 를 다음과 같이 정의한다. 에 자식이 없으면 는 정점 하나짜리 수열이다. 자식이 있으면 번호가 작은 것부터 이라 할 때, 는 뒤에 을 뒤집은 수열, 를 뒤집은 수열, 그렇게 을 뒤집은 수열까지 차례로 이어 붙인 수열이다.
- 답은 을 이 순서로 이어 붙인 뒤 를 뒤집은 수열을 마지막에 붙인 것이다. 각 는 컴포넌트 안에서 계산한다.
이 순서는 항상 메뚜기 경로다.