問題文
この問題では,順列と言った際には (1,2,cdots,N) の順列を指すものとします.
順列 a=(a1,a2,cdots,aN) に対し,f(a) を a のサイクルの個数と定義します. より正確には,f(a) の値は次のように定義されます.
- 1 から N までの番号のついた N 頂点からなる無向グラフを考える. そして,各 1leqileqN について,頂点 i と頂点 ai 間を結ぶ辺を追加する. このときのグラフの連結成分の個数を f(a) とする.
順列 P=(P1,P2,cdots,PN) および整数 K が与えられます. 次の条件を満たす順列 x が存在するかどうか判定し,存在するなら一つ構築してください.
- yi=Pxi として,順列 y を定める.
- この時,f(x)+f(y)=K である.
1 つの入力ファイルにつき,T 個のテストケースを解いてください.
制約
- 1leqTleq105
- 2leqNleq2times105
- 2leqKleq2N
- (P1,P2,cdots,PN) は (1,2,cdots,N) の順列
- 1 つの入力ファイルにつき,N の総和は 2times105 を超えない
- 入力される数はすべて整数
入力
入力は以下の形式で標準入力から与えられる.
T
case1
case2
vdots
caseT
各ケースは以下の形式で与えられる.
N K
P1 P2 cdots PN
出力
各ケースに対し,条件を満たす順列 x が存在しない場合は No
と,存在する場合は以下の形式で答えを出力せよ.
Yes
x1 x2 cdots xN
Yes
, No
を出力する際,各文字は英大文字・小文字のいずれでもよい. 解が複数存在する場合,どれを出力しても正解とみなされる.
入力例 1
3
3 3
1 3 2
2 2
2 1
4 8
1 2 3 4
出力例 1
Yes
2 1 3
No
Yes
1 2 3 4
1 つめのケースでは,x=(2,1,3) とすれば y=(3,1,2) となり,f(x)+f(y)=2+1=3 となります.