케닝

시간 제한2초메모리 제한64 MB

요약
케닝 치환 규칙에 따라 텍스트를 반복적으로 확장해 목표 길이에 도달시키고, 결과를 주어진 폭에 맞춰 줄바꿈하여 출력하는 문제입니다.
난이도

보통10점 중 6점

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

문제

케닝(kenning)은 고대 스칼드 시가에서 유행한 은유의 한 형태로, 하나의 단어를 두 개 이상의 단어로 바꾸어 표현합니다. 예를 들어 "황금을 주는 이"는 "전사"를 뜻하는 케닝입니다. 이 치환은 순전히 형식적이어서 "가난한 황금을 주는 이"와 "가난한 전사" 사이에는 의미 차이가 없습니다. 케닝은 중첩될 수 있습니다. "뱀의 소굴"이 "황금"을 가리키므로, "뱀의 소굴을 주는 이" 역시 전사를 가리킵니다.

긴 글이 급하게 필요하다고 가정해 봅시다. 당황하는 대신, 짧은 글 계획과 케닝 목록을 준비한 뒤 다음 절차로 계획을 확장합니다.

  1. 현재 글의 공백이 아닌 기호 수가 ll개 이상이면 멈춥니다. 글이 완성된 것입니다.
  2. 그렇지 않으면 케닝의 대상 단어인 모든 단어를 해당 케닝 본문으로 동시에 치환하고 1번으로 돌아갑니다.

한 번의 치환은 동시에 일어나므로, 어떤 치환으로 새로 등장한 단어는 그 회차에서는 다시 확장되지 않고 다음 회차에서 확장됩니다.

입력

첫 줄에는 세 정수가 주어집니다. 한 줄의 너비 ww (1≤w≤2551 \le w \le 255), 결과 글에 필요한 공백이 아닌 기호의 최소 개수 ll (1≤l≤30001 \le l \le 3000), 그리고 케닝의 개수 nn (1≤n≤3801 \le n \le 380)입니다.

이어지는 nn개의 줄은 각각 하나의 케닝을 나타냅니다. 각 줄은 대상 단어와 그 뒤에 오는 케닝 본문으로 이루어집니다. 모든 케닝 본문은 적어도 두 개의 단어를 포함합니다. 케닝은 재귀적일 수 있습니다(예: "GNU"를 "GNU is Not UNIX"로 치환). 대상 단어는 대소문자와 문법적 형태를 구분하므로 "warrior", "Warrior", "warriors"는 서로 다른 단어이며 각기 다른 케닝을 가질 수 있습니다. 대상 단어가 같은 케닝은 존재하지 않습니다.

나머지 줄들은 글 계획을 이룹니다.

입력 전체는 최대 3000바이트이며, 영문자, 밑줄, 공백, 줄바꿈, 그리고 숫자(숫자는 첫 줄에만 등장)만 포함합니다. 모든 단어의 길이는 최대 ww입니다. 인접한 두 단어는 정확히 하나의 공백 또는 하나의 줄바꿈으로 구분되며, 어느 줄에도 앞뒤 공백이 없습니다.

출력

절차가 결코 멈추지 않으면(글이 공백이 아닌 기호 ll개에 절대 도달할 수 없으면) No result만을 한 줄에 출력합니다.

그렇지 않으면 결과 글을 출력하되, 각 줄은 공백을 포함해 최대 ww개의 문자만 담습니다. 원래 계획의 모든 줄바꿈은 그대로 유지해야 합니다. 원래의 각 줄 안에서, 어떤 단어가 현재 줄에 들어가지 못하면 그 단어 앞에 새 줄바꿈을 넣습니다. 한 줄에서 인접한 단어는 정확히 하나의 공백으로 구분하며, 어느 줄에도 앞뒤 공백이 없어야 합니다. 올바른 출력의 길이는 10000바이트를 넘지 않습니다.

예제4

  1. 예제 1

    입력
    21 103 7
    king hosts leader
    vessel windless bay of horns
    horns bulls spears
    spears war needles
    Sudden Fate catched
    death_of doomed to death
    Death It was the end
    Sudden
    death_of Fjolner
    in the house of Frodi
    Death
    of the king
    in the vessel
    
    예상 출력
    Fate catched
    doomed to death
    Fjolner
    in the house of Frodi
    It was the end
    of the hosts leader
    in the windless bay
    of bulls spears
    
  2. 예제 2

    입력
    20 10 1
    king hosts leader
    the quick brown fox
    
    예상 출력
    the quick brown fox
    
  3. 예제 3

    입력
    12 8 1
    warrior giver of the gold
    warrior
    
    예상 출력
    giver of the
    gold
    
  4. 예제 4

    입력
    30 20 2
    gold serpents lair
    warrior giver of the gold
    warrior
    
    예상 출력
    giver of the serpents lair