A부터 Z까지 한 줄로 배열할 때 주어진 비밀번호가 연속 구간으로 나타나지 않는 가장 사전 순으로 빠른 배열을 찾고 없으면 불가능함을 출력합니다.
조카 안드레이에게 줄 나무 알파벳 세트를 샀다. A부터 Z까지 26개 글자가 하나씩 들어 있고, 상자가 길쭉해서 글자가 한 줄로 늘어서면 26글자짜리 메시지처럼 보인다.
나는 여러 온라인 계정에 서로 다른 비밀번호 NNN개를 쓰고 있다. 한 줄로 늘어선 26글자 안에 그중 하나가 우연히 그대로 들어가 있을까 봐 걱정된다. 26개 글자를 각각 한 번씩만 써서 한 줄로 배열하되, 어떤 비밀번호도 연속된 부분 문자열로 나타나지 않게 만들 수 있는지 판단하자.
첫 줄에 테스트 케이스의 개수 TTT가 주어진다. 각 테스트 케이스는 두 줄이다. 첫 줄에 정수 NNN이 주어지고, 둘째 줄에 서로 다른 비밀번호 P1,P2,…,PNP_1, P_2, \ldots, P_NP1,P2,…,PN이 공백으로 구분되어 주어진다. 각 비밀번호는 알파벳 대문자로만 이루어진다.
각 테스트 케이스마다 Case #x: y 형식으로 한 줄씩 출력한다. xxx는 1부터 시작하는 테스트 케이스 번호다. yyy는 알파벳 대문자 26개를 각각 한 번씩만 쓴 문자열이면서 어떤 비밀번호도 연속된 부분 문자열로 포함하지 않는 문자열이다. 그런 문자열이 여럿이면 사전순으로 가장 앞서는 것 하나만 출력한다. 조건을 만족하는 문자열이 하나도 없으면 yyy 자리에 IMPOSSIBLE을 출력한다.
Case #x: y
IMPOSSIBLE