这是一个下雨天,你正在室内用字母积木搭建塔楼。字母积木是一个木制立方体,其中一个侧面印有字母。积木的字体使得它们具有明确的方向:即只有一个侧面可以朝下(指向地面),只有一个侧面可以朝上(指向天花板)。
到目前为止,你已经建造了多个独立的塔楼。现在,你想通过选择其中一个塔楼作为底座,然后拿起另一个塔楼(不改变其积木的顺序)并将其堆叠在上面,以此类推,直到所有塔楼都被用完,从而将它们合并成一个单一的“巨型塔楼”。
对于这个巨型塔楼,有一个额外的限制:对于任何两个具有相同字母的积木,它们之间的所有积木也必须具有该字母。也就是说,出现在巨型塔楼中的每个字母都需要出现在一个连续的组中(由一个或多个积木组成)。
例如,考虑以下三种可能的巨型塔楼。(这些是独立的示例,并非由相同的原始塔楼建成。另请注意,不同的积木大小仅为趣味性,并非问题的一部分。)
最左侧的两个巨型塔楼是有效的,因为每个字母都出现在一个连续的组中。然而,最右侧的巨型塔楼是无效的,因为在两个 C 之间有一个 B。
给定你目前建造的塔楼,你能否将它们全部堆叠成一个有效的巨型塔楼?
输入格式
输入的第一行给出测试用例的数量 $T$。接下来是 $T$ 个测试用例。每个测试用例由两行描述。第一行包含一个整数 $N$,表示当前已建造的塔楼数量。第二行包含 $N$ 个字符串 $S_1, S_2, \dots, S_N$,表示这些塔楼。每个字符串仅由大写字母组成。每个字符串的第 $i$ 个字母是所代表塔楼中从底部数起的第 $i$ 个积木上的字母。
输出格式
对于每个测试用例,输出一行,包含 Case #x: y,其中 $x$ 是测试用例编号(从 1 开始),$y$ 是表示如上所述的有效巨型塔楼的字符串,如果无法构建有效的巨型塔楼,则输出单词 IMPOSSIBLE。(注意,字符串 IMPOSSIBLE 本身永远无法代表一个有效的巨型塔楼,因为两个 I 之间有其他字母。)
数据范围
时间限制:5 秒。 内存限制:1 GB。 $1 \le T \le 100$。 $1 \le |S_i| \le 10$,对于所有 $i$。
子任务
测试集 1(可见判定) $2 \le N \le 6$。
测试集 2(可见判定) $2 \le N \le 100$。
样例
样例输入 1
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
样例输出 1
Case #1: ZZZZZJAMMICCODEEEL Case #2: IMPOSSIBLE Case #3: IMPOSSIBLE Case #4: IMPOSSIBLE Case #5: BBBBBAAAAA Case #6: IMPOSSIBLE
说明
在样例 1 中,JAMMICCODEEELZZZZZ 和 ZZZZZJAMMICCODEEEL 是仅有的两个有效输出。
在样例 2 中,回想一下所有塔楼都必须在巨型塔楼中使用,因此即使前五个塔楼加在一起可以形成一个有效的巨型塔楼(如样例 1 所示),额外的 EEK 也使得该情况变得不可能。无论 EEL 和 EEK 塔楼如何相对堆叠,至少会有两组不连续的 E。
在样例 3 中,无论你如何堆叠塔楼,要么两个 O 不连续,要么两个 Y 不连续。
在样例 4 中,HASH 的两个 H 之间存在非 H 字母,因此这种情况也是不可能的。
在样例 5 中,此答案是唯一有效的。还要注意,塔楼不一定全部不同。
在样例 6 中,无论你如何堆叠塔楼,两个 A 都无法保持连续。