페이지가 로드되지 않나요? 여기를 눌러보면 고쳐질 수도 있어요.
Placeholder

#3216

쉼표 4s 256MB

문제

건우는 영어 시간마다 진저리가 난다. 이놈의 영어 문장은 도대체 어떨 때 쉼표(,)를 찍고, 어떨 때 안 찍는지 도저히 모르겠단다. 심지어 미국인, 영국인들도 실제로는 종종 비문법적으로 쉼표를 찍거나, 찍어야 할 곳에 찍지 않는다고 한다. 아주 난해하고 모호한 문법임이 분명하다. 이런게 왜 시험에 나오나 모르겠다.

 

그래서 건우는 딱딱 맞아 떨어지고, 규칙성 있는 새로운 영어 문법을 만들기로 했다. 건우에 따르면, 쉼표는 다음과 같은 규칙으로 찍는다. 참고로 여기서 “지문” 이란 것은 주어진 문장들 전체이며, “문장” 이란 것은, 점(.)으로 구분되는 단위이고, “단어” 라는 것은 공백( ) 또는 쉼표(,)으로 구분되는 단위이다. 

 

1. 어떤 문장에서 어떤 단어 a 앞에 쉼표가 찍혀 있다면, 모든 문장에서 마찬가지로 단어 a 앞에 쉼표가 찍혀 있어야 한다(그 단어가 문장의 첫 단어라면 예외이다.)

 

2. 어떤 문장에서, 어떤 단어 a 뒤에 쉼표가 찍혀 있다면, 모든 문장에서 마찬가지로 단어 a 뒤에 쉼표가 찍혀 있어야 한다(마찬가지로 그 단어가 문장의 마지막 단어라면 예외이다.)

 

3. 1과 2를 더 이상 적용할 수 없을 때까지 반복 적용시킨다.

 

예를 들어 다음과 같은 문장을 보자.

 

go run program. run program, run. program better and better.

(프로그램을 돌려라. 돌려라, 돌려. 점점 나아지는 프로그램)

 

두 번째 문장의 program 뒤에 쉼표가 있기 때문에, 세 번째 문장의 program 뒤에도 쉼표가 붙어야 한다. 첫 번째 문장도 같은 룰을 쓰고 싶으나, program이 맨 마지막 단어이므로 쉼표를 붙일 필요가 없다. 또한 두 번째 문장의 run 앞에 쉼표가 있기 때문에 첫 번째 문장의 run 앞에도 쉼표가 붙는다. 두 번째 문장의 첫 번째 단어인 run 앞에는 쉼표가 붙지 않는 이유는 그 단어가 첫 번째 단어이기 때문이다. 마지막으로, 세 번째 문장에서 program 뒤에 쉼표가 붙음으로써, better 앞에도 쉼표가 붙었으므로, 맨 끝의 단어인 better 앞에도 쉼표가 붙는다. 더 이상 쉼표를 붙일 곳은 없다.

 

결과적으로 다음과 같다.

 

go, run program. run program, run. program, better and, better.

건우의 바램대로 문장을 바꿔주는 프로그램을 작성하라.​ 


입력

한 줄에 전체 지문이 들어온며, 지문의 길이는 2 이상 1,000,000이하이다. 지문을 구성하는 문자는 알파벳 소문자, 쉼표(,), 점(.) 또는 공백이다. 지문은 다음과 같은 규칙으로 입력된다: - 지문에 처음 입력되는 것은 단어이다. - 두 단어 사이엔, 공백, 쉼표와 공백 또는 점과 공백이 올 수 있다. 이처럼 쉼표나 점을 찍을땐, 항상 뒤에 공백을 넣는다. - 지문의 마지막 단어 후에는 점이 입력되며, 그 뒤에 공백은 입력되지 않는다.

출력

건우가 원하는 대로 바뀐 문장을 출력한다.

예제 #1

go run program. run program, run. program better and better.
go, run program. run program, run. program, better and, better.

예제 #2

one, two. one tree. four tree. four four. five four. six five.
one, two. one, tree. four, tree. four, four. five, four. six five.

출처

ACM-ICPC 2018 final, Problem #B, Comma Sprinkler
로그인해야 코드를 작성할 수 있어요.