#P12990. [GCJ 2022 #1C] Letter Blocks

    ID: 12814 远端评测题 5000ms 1024MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>字符串贪心2022Special JudgeGoogle Code Jam

[GCJ 2022 #1C] Letter Blocks

Description

这是一个雨天,所以你待在室内搭建字母积木塔。一个字母积木是一个木制立方体,其一面印有一个字母。使用的字体使积木具有明确的方向性:即只有一个面可以朝下(朝向地板),一个面可以朝上(朝向天花板)。

目前你已经搭建了多个独立的塔。现在你想将它们全部组合成一个超级塔:选择其中一座塔作为基底,然后拿起另一座塔(不改变其积木顺序)将其整体堆叠在基底上,以此类推,直到所有塔都被使用。

超级塔还有一个额外限制:对于任意两个相同字母的积木,它们之间的所有积木也必须是该字母。也就是说,字母表中每个出现在超级塔中的字母必须出现在一个连续的组中(一个或多个积木)。

例如,以下是三个可能的超级塔(这些是独立的示例,并非由相同的原始塔构建而成。另外请注意,积木的不同大小仅为趣味性,不属于题目的一部分)。

最左侧的两个超级塔是合法的,因为每个字母都出现在一个连续的组中。但最右侧的超级塔不合法,因为两个 C 之间有一个 B

给定你目前已搭建的塔,能否将它们全部堆叠成一个合法的超级塔?

Input Format

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

Output Format

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

6
5
CODE JAM MIC EEL ZZZZZ
6
CODE JAM MIC EEL ZZZZZ EEK
2
OY YO
2
HASH CODE
6
A AA BB A BA BB
2
CAT TAX
Case #1: ZZZZZJAMMICCODEEEL
Case #2: IMPOSSIBLE
Case #3: IMPOSSIBLE
Case #4: IMPOSSIBLE
Case #5: BBBBBAAAAA
Case #6: IMPOSSIBLE

Hint

样例解释 1

在样例 #1 中,JAMMICCODEEELZZZZZZZZZZJAMMICCODEEEL 是仅有的两种合法输出。

在样例 #2 中,请注意所有塔都必须用于超级塔,因此即使前五座塔可以组成一个合法超级塔(如样例 #1),额外的 EEK 使得该用例无法实现。无论 EELEEK 塔如何堆叠,至少会有两组不连续的 E

在样例 #3 中,无论怎样堆叠塔,要么两个 O 不连续,要么两个 Y 不连续。

在样例 #4 中,HASHH 之间有非 H 字母,因此该用例也无法实现。

在样例 #5 中,这是唯一的合法答案。另外请注意,塔不一定是完全不同的。

在样例 #6 中,无论怎样堆叠塔,两个 A 都无法连续。

数据范围

  • 1T1001 \leq \mathbf{T} \leq 100
  • 对于所有 ii,$1 \leq \text{字符串 } \mathbf{S}_i \text{ 的长度} \leq 10$。

测试集 1(10 分,可见判定)

  • 2N62 \leq \mathbf{N} \leq 6

测试集 2(15 分,可见判定)

  • 2N1002 \leq \mathbf{N} \leq 100

翻译由 DeepSeek V3 完成