编程题
### 问题描述
在一张由 $N$ 个节点构成的网络中,每个节点(编号 $1$ 到 $N$)都受到了病毒的感染。每个节点 $i$ ($1 \leq i \leq N$)都有一个直连的节点 $P_i$。利用一个病毒的漏洞,一个受感染的节点 $i$ 可以清理与其直连的节点 $P_i$。注意,一旦节点 $P_i$ 被清理,它就不再包含病毒,因此不能用来清理其他节点。需要输出一个操作序列,使得能够清理尽可能多的节点。
### 输入格式
第一行包含一个整数 $N$。
第二行包含 $N$ 个整数,表示直连节点的编号 $P$。
### 输出格式
输出操作序列,每个操作表示为 `A B`,意味着节点 $A$ 清理节点 $B$。
在进行操作时,节点 $A$ 和节点 $B$ 都必须是受感染的。
每个操作单独输出一行。
### 样例输入
```
3
2 1 2
```
### 样例输出
```
2 1
3 2
```
### 评测数据规模
- $2 \leq N \leq 10^5$
- $1 \leq A, B \leq N$
- $1 \leq P_i \leq N$
- $P_i \neq i$