AT_agc060_e [AGC060E] Number of Cycles

Description

[problemUrl]: https://atcoder.jp/contests/agc060/tasks/agc060_e この問題では,順列と言った際には $ (1,2,\cdots,N) $ の順列を指すものとします. 順列 $ a=(a_1,a_2,\cdots,a_N) $ に対し,$ f(a) $ を $ a $ のサイクルの個数と定義します. より正確には,$ f(a) $ の値は次のように定義されます. - $ 1 $ から $ N $ までの番号のついた $ N $ 頂点からなる無向グラフを考える. そして,各 $ 1\ \leq\ i\ \leq\ N $ について,頂点 $ i $ と頂点 $ a_i $ 間を結ぶ辺を追加する. このときのグラフの連結成分の個数を $ f(a) $ とする. 順列 $ P=(P_1,P_2,\cdots,P_N) $ および整数 $ K $ が与えられます. 次の条件を満たす順列 $ x $ が存在するかどうか判定し,存在するなら一つ構築してください. - $ y_i=P_{x_i} $ として,順列 $ y $ を定める. - この時,$ f(x)+f(y)=K $ である. $ 1 $ つの入力ファイルにつき,$ T $ 個のテストケースを解いてください.

Input Format

入力は以下の形式で標準入力から与えられる. > $ T $ $ case_1 $ $ case_2 $ $ \vdots $ $ case_T $ 各ケースは以下の形式で与えられる. > $ N $ $ K $ $ P_1 $ $ P_2 $ $ \cdots $ $ P_N $

Output Format

各ケースに対し,条件を満たす順列 $ x $ が存在しない場合は `No` と,存在する場合は以下の形式で答えを出力せよ. > Yes $ x_1 $ $ x_2 $ $ \cdots $ $ x_N $ `Yes`, `No` を出力する際,各文字は英大文字・小文字のいずれでもよい. 解が複数存在する場合,どれを出力しても正解とみなされる.

Explanation/Hint

### 制約 - $ 1\ \leq\ T\ \leq\ 10^5 $ - $ 2\ \leq\ N\ \leq\ 2\ \times\ 10^5 $ - $ 2\ \leq\ K\ \leq\ 2N $ - $ (P_1,P_2,\cdots,P_N) $ は $ (1,2,\cdots,N) $ の順列 - $ 1 $ つの入力ファイルにつき,$ N $ の総和は $ 2\ \times\ 10^5 $ を超えない - 入力される数はすべて整数 ### Sample Explanation 1 $ 1 $ つめのケースでは,$ x=(2,1,3) $ とすれば $ y=(3,1,2) $ となり,$ f(x)+f(y)=2+1=3 $ となります.