서울과학고대유적 탐험하기 1
시간 제한2초메모리 제한1024 MB
각 시작 정점 i에 대해 최소 번호 우선 규칙으로 생성된 탐험 순서에서 특정 위치의 정점을 질문해, N개 정점의 트리 구조를 복원한다.
문제
서울과학고대유적 탐험하기 1, 2 문제는 질문의 유형을 제외한 모든 사항이 동일합니다.
이 문제는 인터랙티브 문제입니다.
최근 고고학자들은 "서울과학고대유적"이라는 고대 유적을 발견하였다!
서울과학고대유적은 번부터 번까지 개의 유적들과 서로 다른 두 유적을 연결하는 개의 도로로 연결된 트리 형태로 표현할 수 있다. 모든 도로는 양방향으로 이동할 수 있고, 도로를 이용해 모든 유적 사이를 이동할 수 있다.
서울과학고대유적의 도로들은 세월이 지나면서 사라진 지 오래지만, 도로에 대한 정보를 얻을 수 있는 탐험록이 전해져 내려오고 있다. 탐험록은 개의 탐험 기록으로 이루어져 있고, 각 탐험 기록은 개의 유적들을 특정한 순서로 방문한 기록이다.
고고학자들이 서울과학고대유적 탐험록을 분석한 결과, 번째 탐험 기록은 다음과 같은 방법으로 유적들을 방문한 결과임을 밝혀냈다.
- 탐험은 번 유적에서 시작한다. 즉, 번째 탐험 기록에는 번 유적이 첫 번째로 기록되어 있다.
- 현재 위치한 유적과 도로로 직접 연결된 유적 중 아직 방문하지 않은 유적이 존재한다면, 그들 중 번호가 가장 작은 유적을 방문하고 탐험록에 기록한다.
- 만약 도로로 직접 연결된 유적들이 모두 방문되었다면, 도로로 직접 연결된 유적 중 번 유적과 가장 가까운 유적으로 이동한다. 이 경우 현재 유적이 번 유적이 아님을 증명할 수 있다.
- 모든 유적을 방문하였을 때 탐험을 종료한다.
단, 위의 방법으로 탐험을 진행하였을 때 시작점에 관계 없이 모든 유적을 방문하고 탐험록에 기록함을 증명할 수 있다.
서울과학고대유적의 구조를 알아내기 위해 당신은 다음과 같은 질문을 할 수 있다:
? i j: 번 탐험 기록에 기록된 유적의 순서 중 번째로 기록된 유적의 번호를 질문한다.
이때, 서울과학고대유적의 구조를 알아내는 프로그램을 작성하자.
제한
힌트
출력 버퍼를 비우는 방법은 다음과 같다.
- C:
fflush(stdout) - C++:
std::cout << std::flush - Java:
System.out.flush() - Python:
sys.stdout.flush()
이외의 언어에 대해서는 언어별 명세를 참고해야 한다.