小红的等比数列
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}小红有一个长为 n 的数组,她想知道,能否在这个数组中插入一个整数 x\left(\left|x \right| \leqq 10^{18}\right),使得插入后的数组经过重排能成为一个等比数列
\hspace{15pt}你需要给出一种可能的方案。

【名词解释】
\hspace{15pt}等比数列:一个长为 n 的数组是一个等比数列,当且仅当存在一种排序方式,排序后 a_1 \ne 0 且存在一个公比 q\left(q \ne 0 \right),使得对于所有 1 \leqq i < n,有 a_{i+1} = a_i \times q

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leqq T\leqq 2\times10^4\right) 代表数据组数,每组测试数据描述如下:

\hspace{15pt}第一行一个整数 n (2 \leqq n \leqq 10^5)
\hspace{15pt}第二行包含 n 个整数 a_1, a_2, \dots, a_{n} (-10^9 \leqq a_i \leqq 10^9, a_i \ne 0)

\hspace{15pt}除此之外,保证单个测试文件的 n 之和不超过 2 \times 10^5

输出描述:

\hspace{15pt}对于每组测试数据,新起一行。

\hspace{15pt}如果不存在一种合法的方案,请输出 \texttt{No};否则在第一行输出 \texttt{Yes},并在第二行输出 n + 1 个整数 b_1, b_2,\dots,b_{n + 1}\left(1\leqq\left|b_i \right| \leqq 10^{18}\right),代表排列好的等比数列。

\hspace{15pt}如果存在多个解决方案,您可以输出任意一个,系统会自动判定是否正确。注意,自测运行功能可能因此返回错误结果,请自行检查答案正确性。
示例1

输入

复制
2
3
1 2 4
3
1 2 5

输出

复制
Yes
1 2 4 8
No

说明

\hspace{15pt}请注意,输出的等比数列需按顺序排列,对于第一组数据输出 1,4,2,8 不会被判定为正确。