쉼표 뿌리기

어떤 단어의 앞이나 뒤에 이미 쉼표가 있으면 그 단어의 모든 출현에 같은 위치로 쉼표를 반복해서 붙이고, 더 이상 변하지 않을 때의 텍스트를 출력한다.

보통6그래프BFS문자열구현아직 제출이 없습니다시간 제한8초메모리 제한1024 MB

문제

영어의 쉼표 규칙은 복잡하고, 애매한 경우도 많다. 규칙을 무시하는 사람도 있고, 자기만의 규칙을 만들어 쓰는 사람도 있고, 쉼표를 아예 찍지 않는 사람도 있다.

콤마 스프링클러 박사는 애매함이 없는 절차를 만들어 이 문제를 해결했다. 이미 쓰인 글에 쉼표를 찍는 규칙은 다음과 같다.

  1. 글의 어느 곳에서든 어떤 단어 바로 앞에 쉼표가 있으면, 그 단어가 나오는 모든 자리를 찾아 각 자리 앞에 쉼표를 찍는다. 다만 그 자리가 문장의 첫 단어이거나 이미 앞에 쉼표가 있으면 찍지 않는다.
  2. 글의 어느 곳에서든 어떤 단어 바로 뒤에 쉼표가 있으면, 그 단어가 나오는 모든 자리를 찾아 각 자리 뒤에 쉼표를 찍는다. 다만 그 자리가 문장의 마지막 단어이거나 이미 뒤에 쉼표가 있으면 찍지 않는다.
  3. 새로 찍을 쉼표가 없을 때까지 규칙 1과 규칙 2를 반복한다.

글이 주어지면 이 절차를 적용한 결과를 구하는 프로그램을 작성하시오.

첫 번째 예제로 규칙이 어떻게 도는지 보자. 두 번째 문장에서 spot 뒤에 쉼표가 있으므로 세 번째 문장의 spot 뒤에도 쉼표를 찍는다. 첫 번째 문장의 spot은 문장의 마지막 단어라서 그대로 둔다. 두 번째 문장의 sit은 앞에 쉼표가 있으므로 첫 번째 문장의 sit 앞에도 쉼표를 찍지만, 두 번째 문장을 여는 sit 앞에는 찍지 않는다. 세 번째 문장의 spot 뒤에 쉼표가 생기고 나면 첫 번째 here 앞이 쉼표가 되므로, 두 번째 here 앞에도 쉼표를 찍는다. 여기서 더 찍을 쉼표는 없다.

입력

첫째 줄에 글이 주어진다. 길이는 2자 이상 1,000,000자 이하이고, 각 문자는 영어 소문자, 쉼표, 마침표, 공백 중 하나다. 단어는 글 안에서 연속된 글자의 최대 구간을 뜻한다.

글은 다음 조건을 만족한다.

  • 글은 단어로 시작한다.
  • 이웃한 두 단어 사이에는 공백 하나, 쉼표 다음 공백 하나, 마침표 다음 공백 하나 중 하나가 온다. 마침표는 문장의 끝을 뜻하고, 그 다음 단어부터 새 문장이 시작된다.
  • 글의 마지막 단어 뒤에는 마침표가 오고, 그 뒤에 공백은 없다.

출력

스프링클러 박사의 절차를 적용한 결과를 출력한다.