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