#P1648. 平方数划分

    ID: 671 传统题 1000ms 256MiB 尝试: 6 已通过: 1 难度: 10 上传者: 标签>图论二分图搜索深度优先搜索普及+/提高

平方数划分

Description

在数字王国中,存在着这样一个诅咒,如果两个数能够通过相加变成一个平方数,则会引来灾厄。Orange现在管理着一个 nn 个数字构成的集合,为了避免集合中的元素产生灾厄,他需要将其划分成2份子集合,且保证这任意1份子集合内都满足不存在任意2数之和为一个平方数。

你需要告诉Orange是否存在一种划分方案能够满足要求。若存在,请输出任意一种划分方案。

平方数:可以被表示成某个自然数平方形式的数。

Format

Input

输入包含多组测试数据。

第1行为一个整数T,表示测试数据组数。

对于每组测试数据:

第1行为1个整数n,表示集合大小。

第2行为n个整数 aia_i,表示集合中元素。

你应该注意的是,集合中不包含重复元素。

数据范围

对于 20 % 的数据:

1n201 \le n \le 20

对于所有数据:

1T51 \le T \le 5

1n1051 \le n \le 10^5

1ai2×1051 \le a_i \le 2 \times 10^5

Output

对于每个测试数据,若可以满足划分,则输出一行Yes,然后在第2行输出n和m,表示划分的子集1和子集2的大小,并在第3行和第4行分别输出子集合1和子集合2的元素。否则仅输出一行No即可。你只要输出任意一种满足条件的划分均可。

Samples

2
5
1 2 3 4 5
3
6 19 30
Yes
3 2
1 2 4
3 5
No