휴가철 숙소 예약
시간 제한1초메모리 제한128 MB
각 날짜에 어느 호실이 비는지 주어진 표에서, 새 손님의 [a,d) 기간 숙박을 호실 이동 횟수가 최소가 되도록 배정하고, 동률이면 매일 가장 작은 호실 문자를 택한다.
문제
'다섯 번째 계절' 리조트에는 여러 채의 콘도미니엄이 있습니다. 콘도는 대부분 소유주가 직접 사용하지만, 비어 있는 기간에는 휴가용 숙소로 대여됩니다. 리조트의 콘도는 최대 채이므로, 각 콘도는 알파벳 대문자 하나로 구분합니다.
손님이 도착 날짜와 출발 날짜로 예약을 요청합니다. 기존 예약은 대부분 소유주 본인의 예약이므로 다른 방으로 옮길 수 없습니다. 다만 손님을 밤마다 다른 방으로 이동시키는 것은 가능합니다. 예를 들어 처음 세 밤은 B호에 묵고, 남은 기간은 F호로 옮겨 묵을 수 있습니다.
예약은 밤(night) 단위로 셉니다. 도착 날짜가 , 출발 날짜가 인 요청은 일의 밤에 방을 사용하며, 손님은 일에 떠납니다. 즉 1박 예약은 도착 다음 날 떠납니다.
기존 예약을 바꾸지 않으면서 이 요청을 처리하되, 요청 기간 동안 방을 옮기는 이동 횟수를 최소로 하는 것이 목표입니다.
입력
입력은 여러 개의 테스트 케이스로 이루어집니다.
각 테스트 케이스의 첫 줄에는 두 양의 정수 과 이 주어집니다. 은 예약표가 다루는 연속된 날의 수, 은 리조트의 방 수입니다. 날은 최대 일이고 방은 최소 개입니다. 날은 로 번호를 매기고, 방은 부터 시작하는 연속된 대문자로 표시합니다.
이어서 개의 줄이 예약표를 나타냅니다. 번째 줄은 일에 해당하고, 그 줄의 번째 문자는 번째 방()에 해당합니다. 문자 X는 그날 그 방이 이미 예약되어 있음을, O는 사용 가능함을 뜻합니다.
예약표 다음 줄에는 새 요청의 도착 날짜와 출발 날짜, 두 정수가 주어집니다. 도착 날짜는 범위이고, 출발 날짜는 도착 날짜보다 크며 이하입니다.
입력의 끝은 인 줄로 표시되며, 이 줄은 처리하지 않습니다.
출력
각 테스트 케이스마다 먼저 케이스 번호와 콜론을 출력하고, 그다음 빈 줄 하나를 출력합니다.
요청을 처리할 수 있으면, 이동 횟수가 최소인 일정을 출력합니다. 일정의 각 줄은 한 방에서의 연속된 숙박 하나를 나타내며 다음 형식을 따릅니다.
<방>: <시작일>-<종료일>
여기서 <방>은 방의 문자, <시작일>은 그 방에 들어가는 날, <종료일>은 그 방에서 나오는 날입니다. 줄은 시작일이 커지는 순서로 정렬합니다.
동점 처리. 이동 횟수가 최소인 일정이 여러 개일 수 있습니다. 그중에서 방 문자를 날짜순으로 사전식으로 가장 작게 만드는 일정을 고릅니다. 즉 첫 밤에 가장 작은 방 문자를 우선하고(보다 우선), 그래도 같으면 둘째 밤의 방 문자를 더 작게, 이런 식으로 정합니다. 이 규칙으로 답은 유일해집니다.
요청을 처리할 수 없으면 다음 한 줄만 출력합니다.
Not available
연속된 테스트 케이스의 출력은 빈 줄 하나로 구분합니다.