#CF2124A. 乱序删除

乱序删除

A. 乱序删除
时间限制:1 秒
内存限制:256 兆字节

如果一个长度为 mm 的数组 bb 满足以下性质,则称它为乱序数组

  • cc 是与 bb 等长的数组,满足 ci=bic_i = b_i(对 1im1 \le i \le m)。
  • cc 按非递减顺序排序。
  • 若对于所有 1im1 \le i \le m 都有 bicib_i \neq c_i,则 bb 是乱序数组。

例如:

  • b=[4,8,3,1]b = [4,8,3,1],排序后 c=[1,3,4,8]c = [1,3,4,8],由于所有位置 bicib_i \neq c_i,因此 bb 是乱序数组。
  • b=[3,2,1]b = [3,2,1],排序后 c=[1,2,3]c = [1,2,3],由于 b2=c2b_2 = c_2,因此 bb 不是乱序数组。

给定一个长度为 nn 的数组 aa。在一次操作中,你可以从 aa 中删除一个元素。每次删除后,剩余元素的相对顺序保持不变。

输出是否可以通过若干次(可能为零次)操作,使得剩余元素构成一个乱序数组。如果可能,输出任意一种可能的剩余数组。剩余数组必须非空。


输入
每个测试包含多个测试用例。第一行包含测试用例数 tt1t1001 \le t \le 100)。

每个测试用例的第一行包含一个整数 nn1n1001 \le n \le 100)—— 数组 aa 的长度。

第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ain1 \le a_i \le n)—— 数组 aa 的元素。


输出
对于每个测试用例,如果可以通过操作使剩余数组成为乱序数组,则在新一行输出 "YES",否则输出 "NO"

输出大小写不敏感(例如 "yEs""yes""Yes""YES" 均视为肯定回答)。

如果回答为 "YES",则再输出两行:

  • 第一行包含一个整数 kk1kn1 \le k \le n),表示剩余数组的长度。
  • 第二行包含 d1,d2,,dkd_1, d_2, \dots, d_k,表示剩余数组的元素。必须保证 dd 可以通过对 aa 进行若干次删除操作得到,且 dd 是乱序数组。

样例
输入

3
3
2 2 3
5
4 5 5 2 4
1
1

输出

NO
YES
4
4 5 2 4
NO

说明
在第二个测试用例中,可以删除一个 55,使数组变为 [4,5,2,4][4,5,2,4]。可以验证该数组是乱序数组。这不是唯一的解 —— 原始数组 [4,5,5,2,4][4,5,5,2,4] 本身也是一个有效解。