度度熊与整数集合

Accepts: 72
Submissions: 327
Time Limit: 4000/2000 MS (Java/Others)
Memory Limit: 32768/32768 K (Java/Others)
Problem Description
度熊在用一个由最小的 $N$ 个正整数组成的集合 (也就是 $\{1,2,\ldots, N\}$) 和一个下标为 $1 \sim N$ 的数组 $a$ 玩游戏。 游戏开始时数组 $a$ 的所有数字都是 $0$,接着共有 $N-1$ 次操作,每次操作由以下步骤组成: 1. 选取一个元素个数大于 $1$ 的集合 $S$。 2. 对于 $S$ 中所有元素 $i$,都把 $a[i]$ 的值加 $1$。 3. 选取一个正整数 $x$,这个 $x$ 必须满足 $S$ 中小于等于 $x$ 的数的数量以及大于 $x$ 的数的数量都不为 $0$。 4. 把集合 $S$ 分成两个集合,第一个包含 $S$ 中所有小于等于 $x$ 的元素,第二个包含 $S$ 中所有大于 $x$ 的元素,产生出两个集合后,集合 $S$ 就消失了。 $N-1$ 次操作结束后就会产生出 $N$ 个集合,这 $N$ 个集合恰是对于所有 $i = 1 \sim N$,大小为 $1$ 且仅包含数字 $i$ 的集合。 游戏结束后,度熊忘记了 $N-1$ 次操作的过程,只知道操作完后 $a[1] \sim a[N]$ 的值,请根据这些值来还原操作,仅需依序输出第 $i$ 次操作所选的 $x$ 值即可。若有多组解,请输出字典序最小的解。 提示:我们称数组 $c_1,c_2,\ldots,c_n$ 字典序比数组 $d_1,d_2,\ldots,d_n$ 小,当且仅当存在某个 $i$ 满足对于所有$j < i$ 都有 $c_j = d_j$,且 $c_i < d_i$。
Input
有多组询问,第一行包含一个正整数 $T$ 代表有几组询问,接着每组测试数据占 $2$ 行,第一行包含一个正整数 $N$,第二行包含 $N$ 个正整数 $a[1], a[2], \ldots, a[N]$。 * $1 \le T \le 20000$ * $2 \le N \le 10^5$ * $1 \le a[i] \le N-1$ * 所有询问的 $N$ 的总和不超过 $3 \times 10^6$
Output
对对于每一个询问。若有可能还原操作,则输出两行,第一行包含一个字符串 "Possible",第二行包含 $N-1$ 个正整数,依序是第 $i$ 次操作所选的 $x$ 值 (若有多组可能,请输出字典序最小的); 若不可能还原,仅需输出一行包含一个字符串 "Impossible" (不包含引号)。
Sample Input
4
2
1 1
3
1 1 2
4
2 2 2 2
3
1 2 2
Sample Output
Possible
1
Impossible
Possible
2 1 3
Possible
1 2

Note
对于第一组询问来说,当 $n=2$ 时,可能的游戏过程只有一种,也就是在唯一一次的操作中,令 $x=2$,即可把集合 $\{1,2\}$ 拆成两个集合 $\{1\}$ 和 $\{2\}$。游戏结束后数组 $a=[1,1]$ 刚好就是这组询问,所以答案为 $1$。

对于第二组询问来说,没有任何一种游戏方式可以让 $a$ 变成 [1,1,2],答案为 "Impossible"。

对于第三组询问来说,虽然存在 $2,1,3$ 和 $2,3,1$ 两种可能的游戏过程,但 $2,1,3$ 的字典序比较小,所以必须输出 $2,1,3$。