题目描述
在这个问题中,(1,2,⋯,N) 的一个排列有时被称为一个排列。
对于一个排列 a=(a1,a2,⋯,aN),设 f(a) 表示 a 中的循环个数。更准确地说,f(a) 的值定义如下:
- 考虑一个由 N 个顶点组成的无向图,顶点编号为 1 到 N。对于每个 1≤i≤N,加入一条连接顶点 i 和顶点 ai 的边。然后,令 f(a) 表示该图中的连通分量的个数。
给定一个排列 P=(P1,P2,⋯,PN) 和一个整数 K。判断是否存在一个排列 x 满足以下条件,并且如果存在,则构造一个满足条件的排列。
- 设 yi=Pxi,定义一个排列 y。
- 那么,满足 f(x)+f(y)=K。
对于每个输入文件,解决 T 个测试用例。
约束条件
- 1≤T≤105
- 2≤N≤2×105
- 2≤K≤2N
- (P1,P2,⋯,PN) 是 (1,2,⋯,N) 的一个排列。
- 在每个输入文件中,N 的总和不超过 2×105。
- 输入中的所有数字都是整数。
输入
从标准输入中按以下格式给出输入:
T
case1
case2
⋮
caseT
每个测试用例具有以下格式:
N K
P1 P2 ⋯ PN
输出
对于每个测试用例,如果不存在满足条件的排列 x,则输出 No
。否则,以以下格式输出答案:
Yes
x1 x2 ⋯ 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
在第一个测试用例中,令 x=(2,1,3),得到 y=(3,1,2),满足 f(x)+f(y)=2+1=3。