단어 지우기

시간 제한1초메모리 제한128 MB

요약
어떤 단어의 모든 열에서 다음 줄 같은 열에 글자나 별표가 없거나 그 단어가 마지막 줄에 있으면, 문단 전체에서 같은 단어를 모두 공백으로 지우는 과정을 더 이상 지울 단어가 없을 때까지 반복한다.
난이도

보통10점 중 7점

유형
시뮬레이션, 구현, 문자열 매칭
정답자
아직 제출이 없습니다

문제

여러 줄로 이루어진 문단이 주어진다. 한 줄 안에서 단어는 영문자(a–z, A–Z)가 연속으로 이어진 최대 구간이며, 단어와 단어는 공백 또는 별표(*)로 구분된다.

다음 두 조건 중 하나라도 만족하면 그 단어는 지워진다.

  • 단어가 차지하는 모든 열에 대해, 바로 아랫줄의 같은 열에 있는 문자가 영문자도 별표도 아닌 경우(공백이거나, 아랫줄이 그 열까지 닿지 않는 경우), 또는
  • 그 단어가 문단의 마지막 줄에 나타나는 경우.

어떤 단어가 지워지면, 그 아랫줄에 무엇이 있든 상관없이 문단 전체에서 철자가 완전히 같은 단어가 나타나는 모든 위치가 공백으로 바뀐다. 별표와 공백은 절대 사라지지 않으며, 단어는 대소문자를 구분한다(즉 Cat과 cat은 서로 다른 단어다).

단어를 지우면 그 글자들이 공백이 되고, 이로 인해 윗줄 단어를 받치고 있던 문자가 사라져 또 다른 단어가 지워질 수 있다. 더 이상 지울 수 있는 단어가 없을 때까지 이 규칙을 반복해서 적용한다.

입력

첫째 줄에 테스트 케이스의 수 tt (1≤t≤201 \le t \le 20)가 주어진다.

각 테스트 케이스는 A–Z, a–z, 공백, 별표(*)로 이루어진 여러 줄로 구성된다. 각 테스트 케이스의 끝에는 문자 # 하나만 있는 줄이 오며, 이 줄은 문단에 포함되지 않는다.

출력

각 테스트 케이스마다, 지울 수 있는 단어를 모두 지운 뒤의 문단을 출력한다. 지워진 글자는 공백으로 표시한다. 각 줄 끝의 공백은 채점할 때 무시된다. 각 테스트 케이스의 출력 뒤에는 문자 # 하나만 있는 줄을 출력한다.

예제3

  1. 예제 1

    입력
    2
    ACM is
    **
    #
    in this world
    you are in*side
    the world
    *
    #
    
    예상 출력
    ACM
    **
    #
    
    you       *
    the
    *
    #
    
  2. 예제 2

    입력
    1
    cat
    *
    #
    
    예상 출력
    cat
    *
    #
    
  3. 예제 3

    입력
    1
    go home now
    *   *
    #
    
    예상 출력
    go home
    *   *
    #