P12948 [GCJ Farewell Round #1] Rainbow Sort
题目描述
你的朋友 **Charles** 给你出了一个挑战。他在桌上排列了 $\mathbf{N}$ 张卡片,并按他选择的顺序排成一条直线。每张卡片有一种颜色,同一种颜色可能出现在多张卡片上。
**Charles** 要求你在不改变他原有排列顺序的前提下,为每张卡片写上一个正整数,满足以下条件:
1. 当从左到右阅读卡片时,卡片上的数字必须是非递减的。
2. 相同颜色的卡片必须写上相同的数字。
3. 不同颜色的卡片必须写上不同的数字。
最后,**Charles** 希望你按照数字从小到大的顺序排列这些颜色。例如,如果蓝色卡片写的是 2,红色卡片写的是 5,绿色卡片写的是 3,那么颜色顺序应为蓝色、绿色、红色。
输入格式
输入的第一行给出测试用例的数量 $\mathbf{T}$。随后是 $\mathbf{T}$ 个测试用例。
每个测试用例的第一行包含一个整数 $\mathbf{N}$。接下来一行包含 $\mathbf{N}$ 个整数 $\mathbf{S}_1, \mathbf{S}_2, \ldots, \mathbf{S}_\mathbf{N}$,其中 $\mathbf{S}_i$ 表示从左数第 $i$ 张卡片的颜色。
输出格式
对于每个测试用例,输出一行 `Case #x: y`,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是按要求顺序排列的颜色集合(每个颜色仅出现一次)。如果无法在满足所有规则的情况下为卡片写上数字,则 $y$ 应为 `IMPOSSIBLE`。
说明/提示
**样例解释**
在样例 #1 中,4 张卡片共有 3 种不同颜色。一种可行的解决方案是按顺序写上以下数字:1、2、2、3。注意颜色为 8 的两张卡片都写上了相同的数字 2。因此,颜色的顺序为 3、8、2。
在样例 #2 中,设 $c_8$ 和 $c_2$ 分别为颜色 8 和 2 的卡片上写的数字。如果 $c_2 > c_8$,那么最右侧的两张卡片上的数字将不是非递减的;如果 $c_2 < c_8$,则左侧第二和第三张卡片会出现同样的问题;而 $c_8 = c_2$ 又违反了规则之一。因此,这种情况下没有有效的解决方案。
**数据范围**
- $1 \leq \mathbf{T} \leq 100$。
- 对于所有 $i$,$1 \leq \mathbf{S}_{i} \leq 10^{5}$。
**测试集 1(4 分,可见判定)**
- $1 \leq \mathbf{N} \leq 10$。
**测试集 2(10 分,可见判定)**
- $1 \leq \mathbf{N} \leq 10^{5}$。
翻译由 DeepSeek V3 完成