만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

문자 블록

면접 대비

시간 제한5초메모리 제한1024 MB

요약
블록 타워들의 순서를 지키며 하나로 이어 붙여, 같은 글자가 한 덩어리로 모이도록 만들 수 있는지 구합니다.
난이도

보통10점 중 5점

유형
그리디, 문자열, 구현
정답자
아직 제출이 없습니다

문제

비가 오는 날이라 실내에서 문자 블록으로 탑을 쌓고 있습니다. 문자 블록은 한 면에 문자가 인쇄된 나무 정육면체입니다. 글꼴 때문에 블록에는 뚜렷한 방향이 있어서, 바닥을 향할 수 있는 면은 하나, 천장을 향할 수 있는 면도 하나뿐입니다.

지금까지 서로 떨어진 탑을 여러 개 쌓았습니다. 이제 이 탑들을 모두 합쳐 하나의 거대 탑으로 만들려고 합니다. 탑 하나를 바닥으로 정하고, 다른 탑을 블록 순서를 바꾸지 않은 채 통째로 들어 그 위에 올립니다. 모든 탑을 쓸 때까지 이 과정을 반복합니다.

거대 탑에는 조건이 하나 더 있습니다. 같은 문자가 적힌 두 블록 사이에 있는 모든 블록에도 같은 문자가 적혀 있어야 합니다. 즉, 거대 탑에 나타나는 각 문자는 한 블록 이상으로 이루어진 하나의 연속된 구간을 이룹니다.

다음 세 가지 거대 탑을 예로 들어 보겠습니다. 그림의 블록 크기는 재미를 위한 것일 뿐 문제의 조건이 아닙니다.

왼쪽 두 거대 탑은 각 문자가 연속된 구간에 모여 있으므로 유효합니다. 오른쪽 거대 탑은 두 C 사이에 B가 있어서 유효하지 않습니다.

지금까지 쌓은 탑을 모두 올려 유효한 거대 탑을 만들 수 있을까요?

입력

첫 줄에 테스트 케이스의 개수 TT가 주어집니다. 이어서 TT개의 테스트 케이스가 나옵니다. 각 테스트 케이스는 두 줄로 이루어집니다. 첫 줄에는 현재 쌓아 둔 탑의 개수 NN이 정수로 주어집니다. 둘째 줄에는 탑을 나타내는 NN개의 문자열 S1,S2,…,SNS_1, S_2, \dots, S_N이 주어집니다. 각 문자열은 대문자로만 이루어져 있으며, 문자열의 ii번째 글자는 그 탑에서 아래에서 ii번째 블록에 적힌 문자입니다.

출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력합니다. 여기서 xx는 테스트 케이스 번호(1부터 시작)이고, yy는 위에서 설명한 조건을 만족하는 거대 탑을 나타내는 문자열입니다. 유효한 거대 탑을 만들 수 없다면 IMPOSSIBLE을 출력합니다. IMPOSSIBLE은 두 I 사이에 다른 문자가 있으므로 유효한 거대 탑을 나타낼 수 없습니다.

제한

  • 1≤T≤1001 \le T \le 100.
  • 모든 ii에 대해 1≤1 \le SiS_i의 길이 ≤10\le 10.

힌트

예제 1번에서 유효한 출력은 JAMMICCODEEELZZZZZ와 ZZZZZJAMMICCODEEEL 두 개뿐입니다.

예제 2번에서는 모든 탑을 반드시 써야 하므로, 앞의 다섯 탑만으로는 유효한 거대 탑이 되더라도 추가된 EEK 때문에 불가능합니다. EEL과 EEK를 어떤 순서로 쌓아도 E가 두 개 이상의 떨어진 구간으로 나뉩니다.

예제 3번에서는 두 O를 연속시키거나 두 Y를 연속시킬 수 없습니다.

예제 4번에서는 HASH의 두 H 사이에 H가 아닌 문자가 있으므로 불가능합니다.

예제 5번에서는 제시된 답만이 유효합니다. 탑이 모두 서로 다른 것은 아닙니다.

예제 6번에서는 두 A를 연속하게 만들 수 없습니다.

예제1

  1. 예제 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
    
    예상 출력
    Case #1: ZZZZZJAMMICCODEEEL
    Case #2: IMPOSSIBLE
    Case #3: IMPOSSIBLE
    Case #4: IMPOSSIBLE
    Case #5: BBBBBAAAAA
    Case #6: IMPOSSIBLE