新卡片游戏
题号:NC14668
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

𝑐𝑡𝑟与𝑑𝑓𝑑在玩一个游戏,𝑐𝑡𝑟有𝑛张卡片,每张卡片上写了一个数字,其中第𝑖张卡片上的数字为𝑎𝑖。𝑑𝑓𝑑说出了一个质数𝑝,并指出可以将𝑛张卡片重新排列使得相邻两张卡片上数字的乘积是𝑝2 的倍数,即重新排列后满足𝑎𝑖 × 𝑎𝑖+1 𝑚𝑜𝑑 𝑝2 = 0(𝑖 < 𝑛)。𝑐𝑡𝑟 对此表示怀疑,并与𝑑𝑓𝑑打赌,输的人会受到相应的惩罚。
𝑑𝑓𝑑欣然接受了他的挑战,他想知道自己能否赢得这次赌注。

输入描述:

输入第一行为一个整数𝑇(1 ≤ 𝑇 ≤ 20),表示一共有𝑇组测试数据。
对于每组测试数据:
第一行有两个整数𝑛(2 ≤ 𝑛 ≤ 104)和𝑝(1 ≤ 𝑝 ≤ 105),表示卡片总数与𝑑𝑓𝑑提到的的质数。
第二行有𝑛个整数,其中第𝑖个数字𝑎𝑖(1 ≤ 𝑎𝑖 ≤ 105)代表了第𝑖张卡片上的字母。
数据保证𝑝是一个质数。

输出描述:

对于每组测试数据,输出如果dfd能够赢得这次赌注输出“YES”,否则输出“NO”。
示例1

输入

复制
2
5 2
4 4 1 1 1
5 3
3 3 2 2 2

输出

复制
YES
NO

说明

对于第一组样例,卡片重新排列成1 4 1 4 1便能够满足要求。
对于第二组样例,不论怎么排序都无法满足要求。