D. Shohag 喜欢 GCD
每个测试的时间限制:2 秒
内存限制:256 兆字节
Shohag 有一个整数 n 和一个由 m 个互不相同的整数组成的集合 S。
请帮他找到一个字典序最大的整数数组 a1,a2,…,an,使得:
- 对每个 1≤i≤n,有 ai∈S;
- 对所有 1≤i<j≤n,满足:agcd(i,j)=gcd(ai,aj)
如果这样的数组不存在,则输出 −1。
定义说明
- 字典序更大:长度相同的数组 a 和 b 中,在第一个不同的位置 k 处,ak>bk。
- gcd(x,y) 表示 x 和 y 的最大公约数。
输入格式
第一行一个整数 t(1≤t≤104)——测试用例个数。
每个测试用例:
- 第一行两个整数 n 和 m(1≤m≤n≤105)。
- 第二行 m 个递增顺序的互不相同的整数,表示集合 S(1≤x≤n,x∈S)。
数据保证:所有测试用例的 n 之和 ≤3×105。
输出格式
对于每个测试用例:
- 如果没有解,输出 −1。
- 否则输出 n 个整数,表示满足条件的字典序最大的数组。
样例输入
3
6 3
3 4 6
1 1
1
2 1
2
样例输出
6 4 4 3 4 3
1
-1
样例解释
- 第一个测试用例:数组元素都来自 {3,4,6},且所有 (i,j) 对满足 agcd(i,j)=gcd(ai,aj)。例如 (2,3):agcd(2,3)=a1=6,gcd(a2,a3)=gcd(4,4)=4,不相等。这是字典序最大的可行解。
- 第三个测试用例:只能使用 [2,2],但 (1,2) 时:agcd(1,2)=a1=2,gcd(a1,a2)=2,相等,违反条件,故无解。