Acid Text

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

얼마 전 웹 표준 프로젝트(WaSP, Web Standards Project)는 최신 브라우저와 그 CSS 엔진을 검사하는 적합성 테스트 Acid2를 발표했습니다. 이 테스트는 여러 브라우저가 HTML의 종속형 스타일 시트(CSS)를 해석하고 화면에 그릴 때 서로 같은 결과를 내는지 확인합니다. 여러분은 자신이 즐겨 쓰는 텍스트 기반 브라우저 Lynks를 표준 준수 면에서 다른 어떤 텍스트 브라우저보다 뛰어나게 만들고 싶어, 곧바로 CSS 기능을 구현하기로 합니다.

이 텍스트 브라우저에는 여러 개의 그림 파일과 단순화된 스타일 시트가 주어집니다. 하나의 그림은 이름, 높이, 너비, 그리고 문자로 이루어진 2차원 배열로 정의됩니다. 문자 . 은 투명한 픽셀을 뜻하며 그려지지 않고, 그 밖의 모든 문자는 그대로 출력됩니다. 예를 들면 다음과 같습니다.

owl.png 5 7
.-----.
|O...O|
|..v..|
|.<_>.|
.-----.

스타일 시트가 주어졌을 때, 브라우저가 화면에 표시해야 하는 그림을 만들어 내는 것이 여러분의 과제입니다. 스타일 시트는 여러 개의 항목으로 이루어지며, 각 항목의 형식은 다음과 같습니다.

#<id> {
  pos-x : <x> px ;
  pos-y : <y> px ;
  position : <relative = <id>|absolute> ;
  file : <파일 이름> ;
  layer : <레이어 번호> ;
}

CSS 항목에는 다음 규칙이 적용됩니다.

  • 줄 수. 각 CSS 항목은 위 예시처럼 정확히 7줄로 주어집니다.
  • 순서. 각 항목에는 pos-x, pos-y, position, file, layer 다섯 가지 속성이 이 순서대로 정확히 한 번씩, 각각 별도의 줄에 주어집니다.
  • 공백. 각 줄의 시작과 끝, 그리고 위 형식에서 공백이 있는 모든 위치에는 0개 이상의 공백 문자(스페이스와 탭)가 올 수 있습니다.

그림을 합성하는 규칙은 다음과 같습니다.

  • 배경. 배경은 검은색, 즉 공백으로 채워져 있다고 가정합니다.
  • 위치. 화면의 왼쪽 위 모서리를 (x, y) = (0, 0)으로 봅니다. 절대 위치(absolute)는 항상 이 왼쪽 위 모서리를 기준으로 합니다. 상대 위치(relative)는 항상 다른 항목(그 id로 참조)의 왼쪽 위 픽셀을 기준으로 합니다. 항목 사이에 순환 참조는 없으며, 최종적으로 계산된 모든 위치는 x, y가 모두 0 이상입니다.
  • 레이어. 레이어 번호가 큰 그림은 레이어 번호가 작은 그림보다 나중에 그려집니다. 레이어 번호가 같은 그림들은 스타일 시트에 나타난 순서대로 그려지므로, 나중에 그려지는 그림이 앞서 그려진 그림의 투명하지 않은 픽셀을 덮어씁니다.

입력

첫 줄에는 이어지는 시나리오의 개수가 주어집니다. 각 시나리오는 다음과 같이 주어집니다. 첫 줄에는 이어질 파일의 개수(1개 이상, 100개 이하)가 주어집니다. 각 파일은 공백으로 구분된 파일 이름 f, 높이 h, 너비 w (1 ≤ w, h ≤ 100)로 주어지고, 이어서 h개의 줄에 각각 정확히 w개의 문자가 주어집니다. 파일 정의 다음에는 항목의 개수 m (1개 이상, 500개 이하)이 한 줄에 주어지고, 이어서 m개의 항목으로 이루어진 스타일 시트가 주어집니다.

최종 그림의 크기는 최대 1000 × 1000 문자라고 가정해도 됩니다. CSS 항목의 모든 좌표는 절댓값이 1000000 미만인 정수입니다. 모든 파일 이름과 식별자(id)는 알파벳과 숫자, 점(.)으로만 이루어집니다. 이름이 같은 파일은 없으며, 같은 식별자도 없습니다. layer 속성은 0 이상 1000000 이하입니다.

출력

각 시나리오에 대해 먼저 Scenario #i: 형태의 줄을 출력합니다. 여기서 i는 1부터 시작하는 시나리오 번호입니다. 그다음, 스타일 시트의 지시에 따라 모든 그림을 겹쳐 만든 결과 그림을 출력합니다.

결과 그림은 왼쪽 위 모서리가 항상 위치 (0, 0)이 되는, 가능한 한 작은 직사각형이어야 합니다. 단, 투명한 픽셀도 경계에 있더라도 결과 그림에 포함됩니다. 즉 직사각형의 크기는 배치된 모든 그림의 (투명한 픽셀까지 포함한) 전체 범위로 결정됩니다. 비어 있는 칸은 모두 공백으로 채우고, 각 줄은 끝의 공백을 지우지 말고 전체 너비만큼 출력합니다. 서로 다른 시나리오 사이에는 빈 줄 하나를 넣어 구분합니다.