SOJ ONLINE JUDGE

문제 152

가장 큰 잎의 프뤼퍼 수열

내 상태
미제출
난이도
152번 문제 난이도 보기
Gold III
출제자
rlatjwls7882
시간 제한
5000 ms
메모리 제한
1024 MB
152번 문제 태그 보기
구현

정점이 $N$개인 트리가 있다. 정점의 번호는 $1$부터 $N$까지이다. $N \ge 3$이면 다음 과정을 $N-2$번 반복한다.

  • 번호가 가장 큰 잎을 선택한다.
  • 그 잎과 인접한 정점의 번호를 기록하고 잎을 삭제한다.

기록한 번호를 순서대로 나열한 정수 수열 $A$가 주어진다. $A$의 길이는 $\max(0, N-2)$이고, 원소의 인덱스는 $1$부터 시작한다. $N \le 2$이면 수열은 비어 있다. 이 수열로 원래 트리의 간선을 복원해 보자.

입력

첫 번째 줄에 테스트 케이스의 수를 의미하는 정수 $Q$가 주어진다. $(1 \le Q \le 100)$

각 테스트 케이스의 첫 번째 줄에 정수 $N$이 주어진다. $(1 \le N \le 100\,000)$

두 번째 줄에 수열 $A$의 원소가 공백으로 구분되어 주어진다. $(1 \le A_i \le N)$ $N \le 2$이면 빈 줄이 주어진다.

전체 테스트 케이스에서 $N$의 합은 $200\,000$ 이하이다.

출력

각 테스트 케이스마다 간선의 수 $N-1$을 한 줄에 출력한다. 그다음 줄부터 $N-1$개의 줄에 걸쳐 각 간선의 양 끝 정점 번호를 작은 번호부터 공백으로 구분하여 출력한다. 간선은 양 끝 정점 번호의 순서쌍을 기준으로 사전순으로 출력한다.

예제 입력 1

3
1

2

3
2

예제 출력 1

0
1
1 2
2
1 2
2 3

제출

편집기에서 나가려면 Esc를 누른 뒤 Tab 또는 Shift와 Tab을 누르세요.