아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

알파벳 블록과 비밀번호

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

요약
A부터 Z까지 26개 문자를 주어진 비밀번호가 연속 부분 문자열로 하나도 나타나지 않는 사전 순으로 가장 앞선 순열로 배열합니다.
난이도

어려움10점 중 8점

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

문제

A부터 Z까지 영어 알파벳 나무 블록 26개를 한 세트로 샀다. 블록은 길쭉한 상자에 한 줄로 들어 있어서, 그대로 늘어놓으면 26글자짜리 문장처럼 읽힌다.

여러 온라인 계정에 서로 다른 비밀번호 NN개를 쓰고 있는데, 이 26글자 안에 비밀번호가 우연히 그대로 들어갈까 걱정이다. 어떤 비밀번호도 연속한 부분 문자열로 나타나지 않도록 알파벳 26개를 배열할 수 있는지 판단하라.

입력

첫 줄에 테스트 케이스의 수 TT가 주어진다. 이어서 테스트 케이스가 TT개 주어진다. 각 테스트 케이스는 두 줄이다. 첫 줄에 정수 NN이 주어지고, 둘째 줄에 서로 다른 대문자 문자열 P1P_1, P2P_2, ..., PNP_N이 공백으로 구분되어 주어진다. 이 문자열이 비밀번호다.

제한

  • 1≤T≤1001 \le T \le 100
  • 1≤N≤501 \le N \le 50
  • 모든 ii에 대해 1≤∣Pi∣≤261 \le |P_i| \le 26
  • i≠ji \ne j이면 Pi≠PjP_i \ne P_j

출력

각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호다.

yy는 어떤 비밀번호도 연속한 부분 문자열로 포함하지 않는, A부터 Z까지 26글자의 순열이다. 조건을 만족하는 순열이 여러 개면 그중 사전순으로 가장 앞서는 것을 출력한다. 조건을 만족하는 순열이 하나도 없으면 yy 자리에 IMPOSSIBLE을 출력한다.

예제3

  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
    
  2. 예제 2

    입력
    3
    1
    A
    2
    AA ZZ
    1
    AB
    
    예상 출력
    Case #1: IMPOSSIBLE
    Case #2: ABCDEFGHIJKLMNOPQRSTUVWXYZ
    Case #3: ACBDEFGHIJKLMNOPQRSTUVWXYZ
    
  3. 예제 3

    입력
    1
    1
    Z
    
    예상 출력
    Case #1: IMPOSSIBLE