작은 격자의 모든 빈 칸을 이미 있는 글자에 배정해 각 글자가 하나의 직사각형을 이루게 하되, 결과 문자열이 사전순으로 가장 작은 격자를 출력한다.
보통6그리디구현완전 탐색행렬면접 대비아직 제출이 없습니다시간 제한5초메모리 제한512 MB아이들 파티에 낼 케이크가 R행 C열의 격자 모양이다. 보조 요리사가 아이마다 이름의 첫 글자를 케이크의 한 칸에 크림으로 적어 두었다. 한 칸에 적힌 글자는 많아야 하나이고, 첫 글자가 같은 아이는 없으므로 같은 글자가 두 번 나오지 않는다.
아이는 저마다 자기 글자가 들어 있고 다른 아이의 글자는 들어 있지 않은 직사각형 조각 하나를 원한다. 조각의 변은 격자선과 나란해야 한다. 빈 칸을 하나도 남기지 않고 모두 어느 한 아이에게 배정해서 이 조건을 맞춰라. 배정이 가능한 입력만 주어진다. 케이크를 똑같이 나눌 필요는 없고, 어떤 아이는 1×1 조각만 받기도 한다.
첫 줄에 테스트 케이스의 수 T가 주어진다. 이어서 T개의 테스트 케이스가 주어진다. 각 테스트 케이스의 첫 줄에는 두 정수 R과 C가 공백으로 구분되어 주어진다. 그다음 줄부터 C개의 문자로 이루어진 줄이 R개 주어지고, 케이크를 나타낸다. 각 문자는 대문자 알파벳이거나 ?이다. 대문자 알파벳은 그 칸에 이미 적힌 글자를 뜻하고, ?는 빈 칸을 뜻한다.
제한:
각 테스트 케이스마다 먼저 Case #x:만 적힌 줄을 출력한다. 여기서 x는 1부터 시작하는 테스트 케이스 번호다. 그다음 C개의 문자로 이루어진 줄을 R개 출력한다. 출력 격자는 입력 격자와 같되 ?가 모두 대문자 알파벳으로 바뀌어 있어야 하고, 그 글자는 그 칸이 어느 아이의 조각에 속하는지를 뜻한다. 입력에 없던 글자를 새로 적을 수 없다. 또 각 글자마다 그 글자가 적힌 칸 전체가 격자선과 나란한 직사각형 하나를 이루어야 한다.
조건을 만족하는 격자가 여럿이면 그중 하나만 정답으로 인정한다. 격자의 각 줄을 왼쪽에서 오른쪽으로 읽고 줄을 위에서 아래 순서로 이어 붙여 길이 R×C의 문자열을 만들 때, 이 문자열이 사전순으로 가장 작은 격자를 출력하라.