构造
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}给定长度为 n 的数组 a_1,a_2,\dots,a_n,现在需要你构造一个长度为 n 的数组 b_1,b_2,\dots,b_n,使得满足:
\hspace{23pt}\bullet\,对于任意的 i\left(1\leqslant i\leqslant n\right),都有 a_i=\text{mex}(b_1,b_2,\dots,b_{i-1},b_{i+1},\dots,b_n)
\hspace{23pt}\bullet\,数组 b 中的元素满足 0\leqslant b_i\leqslant 10^9

\hspace{15pt}如果没有满足条件的数组 b,则输出 -1

【名词解释】
\hspace{15pt}mex:整数数组的 \operatorname{mex} 定义为没有出现在数组中的最小非负整数。例如,\operatorname{mex}(1,2,3) =0\operatorname{mex}(0,2,5) =1,如果是空集,那么 \operatorname{mex}() =0

输入描述:

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

\hspace{15pt}第一行输入一个整数 n \left (1\leqslant n\leqslant 2\times 10^5\right ),表示数组 a 的长度。
\hspace{15pt}第二行输入 n 个整数 a_1,a_2,\dots,a_n \left (0\leqslant a_i\leqslant 10^9\right ),表示数组元素。

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

输出描述:

对于每一组测试数据,新起一行。若可以构造出满足条件的数组 b,输出 n 个整数,表示你构造出的数组 b;否则,输出 -1

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

输入

复制
4
2
1 0
4
0 1 2 3
6
0 3 1 3 2 3
3
10 0 9

输出

复制
2 0
0 1 2 3
0 5 1 8 2 4
-1