P12990 [GCJ 2022 #1C] Letter Blocks

题目描述

这是一个雨天,所以你待在室内搭建字母积木塔。一个**字母积木**是一个木制立方体,其一面印有一个字母。使用的字体使积木具有明确的方向性:即只有一个面可以朝下(朝向地板),一个面可以朝上(朝向天花板)。 目前你已经搭建了多个独立的塔。现在你想将它们全部组合成一个**超级塔**:选择其中一座塔作为基底,然后拿起另一座塔(不改变其积木顺序)将其整体堆叠在基底上,以此类推,直到所有塔都被使用。 超级塔还有一个额外限制:对于任意两个相同字母的积木,它们之间的所有积木也必须是该字母。也就是说,字母表中每个出现在超级塔中的字母必须出现在一个连续的组中(一个或多个积木)。 例如,以下是三个可能的超级塔(这些是独立的示例,并非由相同的原始塔构建而成。另外请注意,积木的不同大小仅为趣味性,不属于题目的一部分)。 ![](https://cdn.luogu.com.cn/upload/image_hosting/s3qed2k7.png) 最左侧的两个超级塔是合法的,因为每个字母都出现在一个连续的组中。但最右侧的超级塔不合法,因为两个 `C` 之间有一个 `B`。 给定你目前已搭建的塔,能否将它们全部堆叠成一个合法的超级塔?

输入格式

输入的第一行包含测试用例的数量 $\mathbf{T}$。接下来是 $\mathbf{T}$ 个测试用例。每个测试用例由两行描述。第一行是一个整数 $\mathbf{N}$,表示当前搭建的塔的数量。第二行包含 $\mathbf{N}$ 个字符串 $\mathbf{S}_{1}, \mathbf{S}_{2}, \ldots, \mathbf{S}_{\mathbf{N}}$,表示这些塔。每个字符串仅由大写字母组成。每个字符串的第 $i$ 个字母表示对应塔中从底部数第 $i$ 个积木的字母。

输出格式

对于每个测试用例,输出一行 `Case #x: y`,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是表示合法超级塔的字符串,或者如果无法构建合法超级塔,则输出单词 `IMPOSSIBLE`。(注意,字符串 `IMPOSSIBLE` 本身永远不可能表示合法的超级塔,因为两个 `i` 之间有其他字母。)

说明/提示

**样例解释 1** 在样例 #1 中,`JAMMICCODEEELZZZZZ` 和 `ZZZZZJAMMICCODEEEL` 是仅有的两种合法输出。 在样例 #2 中,请注意所有塔都必须用于超级塔,因此即使前五座塔可以组成一个合法超级塔(如样例 #1),额外的 `EEK` 使得该用例无法实现。无论 `EEL` 和 `EEK` 塔如何堆叠,至少会有两组不连续的 `E`。 在样例 #3 中,无论怎样堆叠塔,要么两个 `O` 不连续,要么两个 `Y` 不连续。 在样例 #4 中,`HASH` 的 `H` 之间有非 `H` 字母,因此该用例也无法实现。 在样例 #5 中,这是唯一的合法答案。另外请注意,塔不一定是完全不同的。 在样例 #6 中,无论怎样堆叠塔,两个 `A` 都无法连续。 **数据范围** - $1 \leq \mathbf{T} \leq 100$。 - 对于所有 $i$,$1 \leq \text{字符串 } \mathbf{S}_i \text{ 的长度} \leq 10$。 **测试集 1(10 分,可见判定)** - $2 \leq \mathbf{N} \leq 6$。 **测试集 2(15 分,可见判定)** - $2 \leq \mathbf{N} \leq 100$。 翻译由 DeepSeek V3 完成