일본 플로터 드라이버

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

문제

당신이 근무하는 회사는 멋진 그림을 그릴 수 있는 플로터(plotter) 장치를 생산합니다. 특수 하드웨어가 없는 고객을 위해, 플로터의 동작을 흉내 내어 그 그림을 화면에 출력하는 에뮬레이션 드라이버를 작성해야 합니다.

플로터는 다음 몇 가지 그리기 명령으로 구동됩니다.

  • POINT x y — 주어진 좌표에 작은 원을 찍습니다.
  • TEXT x y txt — 주어진 좌표에 한 줄의 문자열을 표시합니다.
  • LINE x1 y1 x2 y2 — 지정한 두 점 사이에 선을 그립니다.
  • CLEAR x1 y1 x2 y2 — 지정한 직사각형 영역을 지웁니다.
  • PRINT — 출력 페이지를 인쇄하고 현재 작업을 종료합니다.

에뮬레이션 드라이버는 몇 개의 ASCII 문자로 그림을 표현하며, 문자 하나가 좌표계의 기본 단위입니다. 왼쪽 위 문자의 좌표는 (1, 1)이고, X축은 오른쪽, Y축은 아래쪽을 향합니다.

각 명령은 다음과 같이 처리됩니다.

  • POINT: 주어진 좌표에 소문자 o를 찍습니다.
  • TEXT: 한 줄의 문자열을 표시하며, 첫 글자가 주어진 좌표에 놓이고 문자열은 항상 오른쪽으로 이어집니다.
  • LINE: 두 점 사이의 직선을 흉내 냅니다. 선은 방향에 따라 대시(-), 파이프(|), 슬래시(/), 백슬래시(\) 중 하나의 문자로 이루어집니다.
  • CLEAR: 경계가 되는 행과 열을 포함하여 해당 직사각형 영역을 공백으로 채웁니다.
  • PRINT: 그림을 플러스(+), 마이너스(-), 파이프(|) 문자로 만든 테두리로 감싸 인쇄합니다.

한 문자 위에 여러 대상이 겹쳐 그려질 때는 다음 규칙을 따릅니다.

  • 같은 문자가 여러 번 그려지면, 그대로 사용합니다.
  • 파이프와 마이너스 문자만 관여하면, 플러스(+)가 됩니다.
  • 슬래시와 백슬래시만 관여하면, 소문자 x가 됩니다.
  • 그 외의 경우에는 별표(*)가 표시됩니다.

드라이버에 스크립트가 주어지기 전, 특별한 전처리기가 모든 잘못된 명령을 걸러 냅니다. 따라서 모든 좌표는 페이지 범위 안에 있다고 가정할 수 있습니다. 또한 LINE 명령에서 두 점은 항상 서로 다르며, 선은 반드시 수직, 수평, 또는 두 축에 대해 45° 각도 중 하나입니다. LINE과 CLEAR 명령에서 두 점의 상대적 위치에 대한 가정은 없습니다. TEXT 명령의 문자열은 항상 대문자와 숫자로만 이루어집니다.

입력

입력은 여러 개의 스크립트로 이루어집니다. 각 스크립트는 공백으로 구분된 두 정수 X와 Y가 있는 줄로 시작하며($1 \le X, Y \le 75$), 이 값은 페이지의 크기를 나타냅니다. 이후의 각 줄에는 위 명령 중 정확히 하나가 담깁니다. 명령은 항상 대문자이고, 명령의 인자들은 하나의 공백으로 구분됩니다.

PRINT 명령은 항상 스크립트의 마지막 명령입니다. PRINT 뒤에는 새로운 스크립트가 시작됩니다. 입력은 두 개의 0으로 끝나며, 이는 스크립트로 간주하지 않습니다.

출력

각 스크립트에 대해 위에서 설명한 대로 만들어진 그림을 출력합니다. 서로 이웃한 두 그림 사이에는 빈 줄 하나를 둡니다.