문서 색인

아직 제출이 없습니다시간 제한2초메모리 제한128 MB

문제

텍스트 모드 운영체제용 텍스트 편집기를 만들고 있는데, 가장 어려운 부분은 문서 색인(index) 기능이다. 문서의 색인이란 문서에 나오는 모든 단어를 사전순으로 나열하고, 각 단어가 등장하는 쪽 번호를 함께 적은 목록이다.

문서는 여러 문단으로 이루어진다. 각 문단은 한 줄 이상으로 이루어지며, 이웃한 두 문단 사이에는 빈 줄이 정확히 하나 있다.

먼저 문서를 쪽 나누기(pagination) 한다. 한 쪽에는 최대 nn개의 줄이 들어간다. 줄을 위에서부터 차례로 한 쪽에 채워 nn개를 채운 뒤, 다음 보정 규칙을 적용한다.

  • 한 쪽의 마지막 줄이 어떤 문단의 마지막 줄이면, 그 뒤에 오는 빈 줄은 건너뛰어 어느 쪽에도 놓지 않는다. 따라서 어떤 쪽도 빈 줄로 시작하지 않는다.
  • 한 쪽의 마지막 줄이 두 줄 이상인 문단의 첫 줄(고아 줄, orphan)이면, 그 줄을 다음 쪽으로 옮긴다.
  • 한 쪽의 마지막 줄이 세 줄을 초과하는 문단의 끝에서 둘째 줄이면, 그 줄을 다음 쪽으로 옮긴다. 그렇게 하지 않으면 그 문단의 마지막 줄이 한 쪽에 홀로 남기 때문이다(미망 줄, widow).
  • 한 쪽의 마지막 줄이 정확히 두 줄 또는 세 줄인 문단의 끝에서 둘째 줄이면, 그 문단 전체를 다음 쪽으로 옮긴다. 이렇게 하면 고아 줄도 미망 줄도 생기지 않는다.

보정 규칙을 적용한 뒤 다음 쪽을 만들고, 문서 전체를 다 나눌 때까지 이 과정을 반복한다.

단어는 영어 알파벳이 연속으로 이어진 최대 구간이며, 대소문자는 구분하지 않는다. 색인은 각 단어마다 그 단어가 등장하는 쪽 번호를 오름차순으로, 쉼표로 구분하여 적는다. 한 단어가 세 쪽 이상 연속으로 등장하면 그 구간을 첫 쪽 번호와 마지막 쪽 번호를 붙임표(-)로 이어 적는다. 예: 3-5,7-10,12,13,15.

입력

첫째 줄에 정수 nn (4n1004 \le n \le 100)이 주어진다. 그다음부터는 색인을 만들 문서가 주어지며, 입력 전체의 크기는 20,000바이트를 넘지 않는다.

완전히 비어 있는 줄만 빈 줄로 본다. 어떤 줄에도 앞뒤 공백이 없고, 문서에 빈 줄이 연속으로 두 개 나오지 않으며, 문서의 첫 줄은 빈 줄이 아니고, 각 줄의 길이는 200자를 넘지 않는다.

출력

문서에 등장하는 모든 단어를 사전순으로 한 줄에 하나씩 출력한다. 각 단어 뒤에는 공백을 하나 출력하고, 이어서 그 단어가 등장하는 쪽 번호 목록을 위에서 설명한 형식으로 출력한다. 모든 단어는 대문자로 출력한다.