#CF1909D. 分裂加K

分裂加K

D. Split Plus K

每个测试的时间限制:1 秒
内存限制:256 兆字节

黑板上有 nn 个正整数 a1,a2,,ana_1, a_2, \dots, a_n。同时给定一个正整数 kk。你可以执行以下操作任意次(可能为零次):

  • 在黑板上选择一个数 xx
  • 擦除一个 xx
  • 写上两个正整数 y,zy, z,满足 y+z=x+ky + z = x + k

问:是否可能使得黑板上所有数都相等?如果可能,最少需要多少次操作?


输入格式

每个测试包含多个测试用例。第一行包含整数 tt1t1041 \le t \le 10^4)——测试用例的数量。接下来是每个测试用例的描述:

  • 第一行包含两个整数 n,kn, k1n21051 \le n \le 2 \cdot 10^51k10121 \le k \le 10^{12})——初始黑板上数的个数以及常数 kk
  • 第二行包含 nn 个整数 a1,a2,,ana_1, a_2, \dots, a_n1ai10121 \le a_i \le 10^{12})——初始黑板上数的状态。

保证所有测试用例的 nn 之和不超过 21052 \cdot 10^5


输出格式

对于每个测试用例,输出一行一个整数:使黑板上所有数相等所需的最少操作次数,若不可能则输出 1-1


样例输入

9
2 1
3 4
2 3
7 11
3 10
100 40 100
2 1
1 2
2 2
1 2
1 327869541
327869541
5 26250314066
439986238782 581370817372 409476934981 287439719777 737637983182
5 616753575719
321037808624 222034505841 214063039282 441536506916 464097941819
5 431813672576
393004301966 405902283416 900951084746 672201172466 518769038906

样例输出

3
1
4
-1
-1
0
3119
28999960732
-1

样例解释

第一个测试用例k=1k = 1。可以通过以下操作使所有数变成 22

  1. 擦除 x=4x = 4,写上 (y,z)=(2,3)(y, z) = (2, 3)。注意 y+z=x+ky + z = x + k。此时黑板上的多重集为 {3,2,3}\{3, 2, 3\}
  2. 擦除 x=3x = 3,写上 (y,z)=(2,2)(y, z) = (2, 2)。黑板变为 {2,2,2,3}\{2, 2, 2, 3\}
  3. 擦除 x=3x = 3,写上 (y,z)=(2,2)(y, z) = (2, 2)。黑板变为 {2,2,2,2,2}\{2, 2, 2, 2, 2\}

33 次操作。可以证明无法用少于 33 次操作达成。

第二个测试用例k=3k = 3。一次操作即可使所有数变成 77

  • 擦除 x=11x = 11,写上 (y,z)=(7,7)(y, z) = (7, 7)。黑板变为 {7,7,7}\{7, 7, 7\}

第三个测试用例k=10k = 10。可以通过 44 次操作使所有数变成 4040

  1. 擦除 x=100x = 100,写上 (y,z)=(70,40)(y, z) = (70, 40)。黑板变为 {70,40,40,100}\{70, 40, 40, 100\}
  2. 擦除 x=70x = 70,写上 (y,z)=(40,40)(y, z) = (40, 40)。黑板变为 {40,40,40,40,100}\{40, 40, 40, 40, 100\}
  3. 擦除 x=100x = 100,写上 (y,z)=(40,70)(y, z) = (40, 70)。黑板变为 {40,40,40,40,40,70}\{40, 40, 40, 40, 40, 70\}
  4. 擦除 x=70x = 70,写上 (y,z)=(40,40)(y, z) = (40, 40)。黑板变为 {40,40,40,40,40,40,40}\{40, 40, 40, 40, 40, 40, 40\}

第四、第五个测试用例:可以证明不可能使所有数相等。