만드는 중입니다

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

게임 정렬: Part 1

면접 대비

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

요약
주어진 P개의 문자열마다 글자 순서를 바꿔, 전체 목록이 사전순으로 정렬되도록 만들 수 있는지 판단합니다. 가능하면 바꾼 문자열도 출력합니다.
난이도

보통10점 중 5점

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

문제

참고: 문제 Game Sort: Part 1과 Game Sort: Part 2의 본문은 마지막 문단을 제외하면 같다. 그 밖의 내용으로는 두 문제를 각각 독립적으로 풀 수 있다.

Amir와 Badari가 정렬 게임을 한다. 심판이 공정하게 정한 문자열 S\mathbf{S}와 정수 P\mathbf{P}로 게임이 시작된다. Amir는 S\mathbf{S}를 정확히 P\mathbf{P}개의 연속된 비어 있지 않은 부분 문자열로 나눠야 한다. 예를 들어 S\mathbf{S}가 CODEJAM이고 P=3\mathbf{P} = 3이면, Amir는 [COD, EJA, M] 또는 [CO, D, EJAM]으로 나눌 수 있다. 하지만 [COD, EJAM], [COD, JA, M], [EJA, COD, M], [CODE, EJA, M]으로는 나눌 수 없다.

그다음 Badari는 각 부분의 글자를 재배열해서, 부분들을 나열했을 때 사전순으로 정렬되도록 해야 한다(같은 문자열은 허용). 성공하면 Badari가 이기고, 그렇지 못하면 Amir가 이긴다. Amir가 만든 분할이 주어졌을 때, Badari가 이기도록 도울 수 있는지 판단하라. 이길 수 없다면 불가능하다고 답하라.

입력

첫 줄에 테스트 케이스의 수 T\mathbf{T}가 주어진다. 이어서 T\mathbf{T}개의 테스트 케이스가 주어진다. 각 테스트 케이스는 두 줄로 이루어진다. 첫 줄에는 Amir가 만든 부분의 개수 P\mathbf{P}가 하나의 정수로 주어진다. 둘째 줄에는 순서대로 P\mathbf{P}개의 문자열 S_1,S_2,…,S_P\mathbf{S\_1}, \mathbf{S\_2}, \dots, \mathbf{S\_P}가 주어진다.

출력

각 테스트 케이스마다 Case #x: y 형식의 한 줄을 출력한다. 여기서 xx는 테스트 케이스 번호(1부터 시작)이고, yy는 Badari가 이길 수 있으면 POSSIBLE, 이길 수 없으면 IMPOSSIBLE이다. 이길 수 있다면 두 번째 줄에 t_1 t_2 … t_Pt\_1\, t\_2\, \dots\, t\_{\mathbf{P}}를 출력한다. 여기서 t_it\_i는 S_i\mathbf{S\_i}의 글자를 재배열한 문자열이고, 모든 ii에 대해 t_it\_i는 t_i+1t\_{i+1}보다 사전순으로 앞서거나 같아야 한다. 답이 여러 개이면 그중 아무거나 출력해도 된다.

제한

1≤T≤1001 \le \mathbf{T} \le 100.

모든 ii에 대해 S_i\mathbf{S\_i}의 각 문자는 영문 대문자 A부터 Z까지 중 하나이다.

힌트

예제 #1에서 Badari는 다른 방법 5가지로도 이길 수 있다. 그중 두 가지는 [CO, JED, MA]와 [CO, EJD, MA]이다.

예제 #2에서 Badari는 Amir가 준 부분을 그대로 두기만 해도 이긴다. 다른 방법도 가능하다.

예제 #3에서 Amir는 Badari에게 이길 선택지를 남기지 않아 자신의 승리를 보장했다.

예제1

  1. 예제 1

    입력
    3
    3
    CO DEJ AM
    3
    CODE JA M
    2
    ABABABAB AAA
    
    예상 출력
    Case #1: POSSIBLE
    CO DEJ MA
    Case #2: POSSIBLE
    CODE JA M
    Case #3: IMPOSSIBLE