AT_utpc2021_n Tree Swapping
Description
[problemUrl]: https://atcoder.jp/contests/utpc2021/tasks/utpc2021_n
$ N $ 頂点の木の辺の列 $ E\ =\ \left(\left(X_1,\ Y_1\right),\ \ldots,\ \left(X_{N-1},\ Y_{N-1}\right)\ \right) $ から以下のような手順で生成される順列を $ f(E) $ とします。
1. 順列 $ Q\ =\ (1,\ \ldots,\ N) $ を準備する。
2. $ i\ =\ 1,\ \ldots,\ N\ -\ 1 $ の順に $ Q $ の $ X_i $ 番目と $ Y_i $ 番目の要素を入れ替える。
3. 最終的な $ Q $ を $ f(E) $ とする。
$ \left(1,\ \ldots,\ N\ \right) $ の順列 $ P $ と $ M $ 個の辺 $ (A_i,\ B_i) $ が与えられます。$ M $ 個の辺をすべて含み、木をなすような辺の列 $ E $ であって、$ f(E)\ =\ P $ を満たすものがあるかを判定し、存在する場合は一つ出力してください。複数存在する場合はどれを出力しても構いません。
$ M $ 個の辺からなるグラフは自己ループや閉路を持たないことが保証されます。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $ $ P_1 $ $ \ldots $ $ P_N $ $ A_1 $ $ B_1 $ $ \vdots $ $ A_M $ $ B_M $
Output Format
解が存在しない場合は、一行に `No` を出力せよ。
存在する場合は、一行目に `Yes` と出力した後、二行目以降に $ (A_i,\ B_i) $ を $ i $ 番目の辺として、以下の形式で出力せよ。
> $ A_1 $ $ B_1 $ $ \vdots $ $ A_{N-1} $ $ B_{N-1} $
ただし、$ (A_1,\ B_1),\ \ldots,\ (A_{N-1},\ B_{N-1}) $ は木をなす必要があり、答えが複数存在する場合はどれを出力してもかまわない。
Explanation/Hint
### 制約
- 入力は全て整数
- $ 1\ \le\ N\ \le\ 2\ \times\ 10^5 $
- $ 0\ \le\ M\ \le\ N\ -\ 1 $
- $ 1\ \le\ P_i\ \le\ N $
- $ P $ は $ \left(1,\ \ldots,\ N\ \right) $ の順列
- $ 1\ \le\ A_i,\ B_i\ \le\ N $
- $ A_i\ \neq\ B_i $
- $ (A_i,\ B_i) $ からなるグラフは閉路や多重辺をもたない
### Sample Explanation 1
数列は $ (1,\ 2,\ 3)\ \rightarrow\ (2,\ 1,\ 3)\ \rightarrow\ (2,\ 3,\ 1) $ と変化します。