단어 추출

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

문제

학생들이 실제로 쓰는 단어를 모아 사전을 만들려고 한다. 과제물, 게시판 글, 이메일에서 가져온 텍스트를 프로그램에 넣어 단어만 뽑아낸다.

같은 단어를 이미 봤는지 쉽게 확인하려면 텍스트를 일정한 형태로 다듬어야 한다. 텍스트 한 줄을 다음 순서로 처리한다.

  1. 대문자는 모두 소문자로 바꾼다.
  2. 알파벳은 a부터 z까지, 숫자는 0부터 9까지다. 공백을 뺀 나머지 글자는 모두 구두점이다.
  3. 구두점의 바로 앞 글자와 바로 뒤 글자가 둘 다 알파벳이면 그 구두점만 지우고 양옆을 붙인다. 그렇지 않으면 구두점을 공백 한 칸으로 바꾼다. 앞뒤를 볼 때는 항상 처리하기 전의 줄을 기준으로 하므로 구두점이 이어져 있어도 서로 영향을 주지 않는다. 줄의 맨 앞이나 맨 뒤에 붙은 구두점은 한쪽에 글자가 없으니 공백이 된다.
  4. 이렇게 만든 문자열을 공백으로 잘라 단어를 얻는다.
  5. 숫자로만 이루어진 단어는 버린다.
  6. 남은 단어를 사전순으로 정렬하고 중복은 하나만 남긴다. 비교는 ASCII 코드값 순서라서 숫자가 알파벳보다 앞에 온다.

가령 haven't는 작은따옴표 양옆이 알파벳이라 havent가 되고, Hartley-Jones.hartleyjones가 된다. top-10은 하이픈 뒤가 숫자여서 top10으로 갈라지고, 10은 숫자뿐이라 버린다.

입력

입력은 여러 줄로 이루어지고 각 줄이 분석할 텍스트 한 덩어리다. 입력은 # 한 글자만 있는 줄로 끝나며 이 줄은 텍스트가 아니다.

텍스트는 적어도 한 줄 있고, 한 줄의 길이는 250자를 넘지 않는다. 각 줄은 출력 가능한 ASCII 문자, 즉 코드 32번부터 126번까지의 글자로만 이루어진다.

출력

텍스트 한 줄에서 뽑은 단어를 사전순으로 한 줄에 하나씩 출력한다. 텍스트 한 줄이 단어 집합 하나에 대응하고, 이웃한 두 집합 사이에는 빈 줄을 하나 넣는다.

단어가 하나도 남지 않는 줄도 집합 하나로 센다. 그 집합은 아무것도 출력하지 않지만 구분용 빈 줄은 그대로 들어가므로 빈 줄이 연달아 나올 수 있다.