만드는 중입니다

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

비밀번호가 없는 알파벳 배열

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

요약
A부터 Z까지 한 줄로 배열할 때 주어진 비밀번호가 연속 구간으로 나타나지 않는 가장 사전 순으로 빠른 배열을 찾고 없으면 불가능함을 출력합니다.
난이도

보통10점 중 6점

유형
백트래킹, 문자열 매칭, 완전 탐색
정답자
아직 제출이 없습니다

문제

조카 안드레이에게 줄 나무 알파벳 세트를 샀다. A부터 Z까지 26개 글자가 하나씩 들어 있고, 상자가 길쭉해서 글자가 한 줄로 늘어서면 26글자짜리 메시지처럼 보인다.

나는 여러 온라인 계정에 서로 다른 비밀번호 NN개를 쓰고 있다. 한 줄로 늘어선 26글자 안에 그중 하나가 우연히 그대로 들어가 있을까 봐 걱정된다. 26개 글자를 각각 한 번씩만 써서 한 줄로 배열하되, 어떤 비밀번호도 연속된 부분 문자열로 나타나지 않게 만들 수 있는지 판단하자.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 두 줄이다. 첫 줄에 정수 NN이 주어지고, 둘째 줄에 서로 다른 비밀번호 P1,P2,…,PNP_1, P_2, \ldots, P_N이 공백으로 구분되어 주어진다. 각 비밀번호는 알파벳 대문자로만 이루어진다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤N≤261 \le N \le 26
  • 1≤∣Pi∣≤261 \le |P_i| \le 26
  • i≠ji \ne j이면 Pi≠PjP_i \ne P_j
  • 한 비밀번호 안에서 같은 글자가 여러 번 나올 수 있다.

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다. yy는 알파벳 대문자 26개를 각각 한 번씩만 쓴 문자열이면서 어떤 비밀번호도 연속된 부분 문자열로 포함하지 않는 문자열이다. 그런 문자열이 여럿이면 사전순으로 가장 앞서는 것 하나만 출력한다. 조건을 만족하는 문자열이 하나도 없으면 yy 자리에 IMPOSSIBLE을 출력한다.

예제1

  1. 예제 1

    입력
    7
    1
    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    1
    X
    1
    QQ
    5
    XYZ GCJ OMG LMAO JK
    3
    AB YZ NM
    6
    C PYTHON GO PERL RUBY JS
    2
    SUBDERMATOGLYPHIC UNCOPYRIGHTABLES
    
    예상 출력
    Case #1: ABCDEFGHIJKLMNOPQRSTUVWXZY
    Case #2: IMPOSSIBLE
    Case #3: ABCDEFGHIJKLMNOPQRSTUVWXYZ
    Case #4: ABCDEFGHIJLKMNOPQRSTUVWXZY
    Case #5: ACBDEFGHIJKLMNOPQRSTUVWXZY
    Case #6: IMPOSSIBLE
    Case #7: ABCDEFGHIJKLMNOPQRSTUVWXYZ