袋鼠将军的神秘序列
题号:NC294821
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 1024 M,其他语言2048 M
Special Judge, 64bit IO Format: %lld

题目描述

\hspace{15pt}为了提升自己的战斗力,袋鼠将军想得到一个神秘的序列。
\hspace{15pt}初始状态下,袋鼠将军有一个长度为 n 且元素全为 0 的序列。袋鼠将军可以进行不多于 n 次操作(包括 0 次)。在每次操作中,袋鼠将军可以记录当前序列的 \operatorname{MEX},然后选择任意一个序列中的元素,将这个元素替换成这个 \operatorname{MEX}
\hspace{15pt}给定一个长度为 n 的序列,袋鼠将军希望你给出一个操作序列,将初始状态下的序列变成上述给定的序列。

【名词解释】
\hspace{15pt}一个序列的 \operatorname{MEX} 表示没有在这个序列中出现的最小非负整数。例如,\{0, 1, 3, 1\}\operatorname{MEX}2\{1, 3\}\operatorname{MEX}0\{2, 0, 1, 3\}\operatorname{MEX}4

输入描述:

\hspace{15pt}每个测试文件均包含多组测试数据。第一行输入一个整数 T\left(1\leq T\leq 100\right) 代表数据组数,每组测试数据描述如下:
\hspace{15pt}第一行输入一个整数 n\left(1\leq n\leq 100\right) 代表给定序列的长度。
\hspace{15pt}第二行输入 n 个整数 a_1, a_2, \ldots, a_n\left(0 \leq a_i \leq 100\right) 代表给定序列。

输出描述:

\hspace{15pt}对于每组数据,如果不存在满足条件的操作序列,新起一行输出 -1

\hspace{15pt}否则,请参考下方的格式输出。
\hspace{15pt}第一行输出一个整数 x \left(0\leq x\leq n\right),表示袋鼠将军需要操作的次数。
\hspace{15pt}第二行输出 x 个整数 o_1, o_2, \ldots, o_x\left(1\leq o_i \leq n\right),其中 o_i 表示袋鼠将军第 i 次进行的操作为将序列中的第 o_i 个元素替换为 \operatorname{MEX}(下标从 1 开始)。
\hspace{15pt}可以证明,如果存在这样的操作序列,那么一定存在长度不超过 n 的操作序列。

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

输入

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

输出

复制
1
1
1
3
3
5 4 5
-1

说明

\hspace{15pt}对于第一组测试数据,我们需要把初始序列 \{0\} 变成 \{1\}。初始序列的 \operatorname{MEX}1,所以我们可以将序列中的 0 替换为 1,于是序列变为 \{1\},满足题意。

\hspace{15pt}对于第三组测试数据,一种可行的操作方式为:首先将 \{0, 0, 0, 0, 0\} 变为 \{0, 0, 0, 0, 1\},然后变为 \{0, 0, 0, 2, 1\},最后变为 \{0, 0, 0, 2, 3\}。需要注意的是,在最后一步中,\{0, 0, 0, 2, 1\}\operatorname{MEX}3,所以我们可以将最后一个元素 1 替换为 3,即得到目标序列。操作序列即为:\{5, 4, 5\}

\hspace{15pt}对于第四组测试数据,可以证明,不存在这样的操作方式。