주석은 전부 무시해 (Small)

문서에서 중첩된 /* */ 주석 블록을 왼쪽에서 오른쪽으로 한 번 훑어 모두 지우고 나머지 텍스트를 그대로 출력합니다.

보통4스택문자열시뮬레이션아직 제출이 없습니다시간 제한5초메모리 제한512 MB

문제

이고르는 C 스타일 /* ... */ 블록으로 주석을 쓴다. 파이썬이든 하스켈이든 HTML이나 XML 문서든, 어디서나 이 한 가지 주석 형식만 쓰고 싶어 한다. 그러려면 주석 전처리기가 필요하다. /*로 열고 주석 내용이 이어지고 */로 닫는 주석 블록을 모두 지우는 프로그램이다. 전처리를 마친 텍스트는 원래 속한 컴파일러나 렌더러로 넘긴다.

전처리기가 하는 일은 단순한 찾아 바꾸기가 아니다.

주석 블록은 대부분의 프로그래밍 언어에서 괄호가 중첩되듯이 중첩된다. 주석 안에 다른 주석이 들어갈 수 있다. 아래 코드에는 바깥쪽 주석이 하나 있고 그 안에 주석 두 개가 들어 있다.

printf("Hello /* a comment /* a comment inside comment */ 
        inside /* another comment inside comment */ 
        string */ world");

전처리를 거치면 이렇게 된다.

printf("Hello  world");

주석은 텍스트의 어느 자리에나 나올 수 있다. 문자열 "/*...*/" 안에도, 숫자 상수 12/*...*/34 중간에도, 문자 이스케이프 \/*...*/n 안에도 나온다.

형식으로 정리하면 다음과 같다.

text:
  text-piece
  text-piece remaining-text
text-piece:
  char-sequence-without-/*
  empty-string
remaining-text:
  comment-block text

comment-block:
  /* comment-content */
comment-content:
  comment-piece
  comment-piece remaining-comment
comment-piece:
  char-sequence-without-/*-or-*/
  empty-string
remaining-comment:
  comment-block comment-content

char:
  letters
  digits
  punctuations
  whitespaces

text가 주어지면 그 안의 comment-block을 모두 지운다.

입력

입력은 /**/로 쓴 주석 블록이 들어 있을 수 있는 텍스트 문서 하나다. 이 문서는 올바르다. 위에서 정의한 text 규칙을 따르므로 열린 블록은 반드시 닫힌다. 입력은 항상 줄바꿈으로 끝난다.

출력

먼저 다음 줄을 출력한다.

Case #1:

그다음 주석 블록을 모두 지운 문서를 출력한다. 주석 바깥의 공백과 빈 줄은 하나도 지우지 않는다.

제한

문서의 크기는 2 KB(2048바이트) 미만이다.

문서에는 다음 문자만 나온다.

  • 영문자 a-z, A-Z
  • 숫자 0-9
  • 문장 부호 ~ ! @ # % ^ & * ( ) - + = : ; " ' < > , . ? | / \ { } [ ] _
  • 공백 문자: 스페이스, 줄바꿈

힌트

전처리기는 왼쪽에서 오른쪽으로 한 번만 훑으면서 주석을 지운다. 어떤 블록을 지운 결과로 새로 생긴 블록은 다시 지우지 않는다. 예를 들어

//*no recursion*/* file header */

는 이렇게 된다.

/* file header */

이미 어떤 /**/에 쓰인 *는 다른 /**/에 다시 쓰이지 않는다. 그래서 /*/는 완결된 주석 블록이 아니다. 앞의 /*가 주석을 열고, 남은 /는 주석 내용이 된다.