6971.Prüfer Code

Time Limit: 1s Memory Limit: 512MB

A Prüfer code of a tree of $n$ nodes is a sequence of $n-2$ integers that uniquely specifies the structure of the tree.

The code is constructed as follows: As long as there are at least three nodes left, find a leaf with the smallest label, add the label of its only neighbor to the code, and remove the leaf from the tree.

Given a Prüfer code of a tree, your task is to construct the original tree.

Input Format(From the terminal/stdin)

The first input line contains an integer $n$ : the number of nodes. The nodes are numbered $1,2,\ldots,n$ .

The second line contains $n-2$ integers: the Prüfer code.

  • $3 \le n \le 2 \cdot 10^5$
  • $1 \le a,b \le n$

Output Format(To the terminal/stdout)

Print $n-1$ lines describing the edges of the tree. Each line has to contain two integers $a$ and $b$ : there is an edge between nodes $a$ and $b$ . You can print the edges in any order.

Sample Input

Copy
5
2 2 4
 \n
 · · \n

Sample Output special judge

Copy
1 2
2 3
2 4
4 5
 · \n
 · \n
 · \n
 · \n
Source: CSES, Advanced Graph Problems, 1134

Submit

请先 登录

© 2025 FAQs