만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

숲 그림 그리기

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

요약
M×M 캔버스에 나무와 그루터기 좌표를 받아 화면 밖은 잘라내며 아스키 숲 그림을 그리고, 별표 테두리를 두른다.
난이도

보통10점 중 4점

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

문제

놀이공원에는 어린 방문객에게 인기가 많은 "숲 그림 그리기" 놀이가 있다. 참가 인원에 사실상 제한이 없고 거의 모두가 상을 받는다. 규칙은 간단하다. 진행자가 최근에 본 숲의 모습을 짧게 설명하면, 참가자는 종이와 크레용을 받아 그 모습을 최대한 비슷하게 그린다. 지구 어딘가에 있는 숲의 한 조각을 어떤 화풍으로든 일부라도 그려서 내면 초콜릿이나 과일을 작은 상으로 받는다.

이 문제에서는 이 놀이를 흉내 내는 프로그램을 만든다. 다만 너는 어린 참가자보다 훨씬 능숙하므로 그림이 규격과 정확히 일치해야 한다. 그려야 할 그림에는 빈터가 담겨 있다. 빈터는 둘레의 빽빽한 숲보다 나무가 적게 자란, 숲속의 열린 공간이다. 그림은 아스키 아트로 출력한다.

M×MM \times M 크기의 그림은 MM개의 행으로 이루어진 캔버스로 나타내고, 각 행은 MM개의 문자로 이루어진다. 그림의 화소 하나는 캔버스 위의 출력 가능한 아스키 문자 하나로 나타내고, 화소의 좌표는 캔버스 위 문자의 좌표와 같다. 그림의 왼쪽 아래 구석 화소의 좌표는 (0,0)(0, 0), 오른쪽 위 구석 화소의 좌표는 (M−1,M−1)(M-1, M-1)이다. 오른쪽 아래 구석 화소의 xx좌표는 M−1M-1이다.

그림의 화소는 각각 풀밭이거나, 서 있는 나무의 일부이거나, 그루터기의 일부다. 풀밭 화소는 점 하나 . (아스키 코드 46)로 나타낸다. 서 있는 나무와 그루터기는 화소 여러 개로 그리며, 캔버스에 나타나는 모양은 다음과 같다.

서 있는 나무의 높이 SS는 양수이고, 나무는 뿌리, 줄기, 가지, 꼭대기의 네 부분으로 이루어진다. 뿌리는 가로로 이웃한 문자 세 개 _|_ (아스키 코드 95, 124, 95)로 나타낸다. 줄기는 뿌리 한가운데의 바로 위에 세로로 이웃하게 놓인 세로 막대 | (아스키 코드 124) SS개다. 가지는 줄기 바로 왼쪽에 놓인 왼쪽 가지 SS개와 줄기 바로 오른쪽에 놓인 오른쪽 가지 SS개로 이루어지고, 가지는 모두 줄기와 맞닿는다. 왼쪽 가지 하나는 빗금 / (아스키 코드 47), 오른쪽 가지 하나는 역빗금 \ (아스키 코드 92)로 나타낸다. 꼭대기는 줄기의 가장 위 문자 바로 위에 놓인 ^ (아스키 코드 94) 하나다.

그루터기는 가로로 이웃한 화소 세 개이고, _o_ (아스키 코드 95, 111, 95)로 나타낸다.

서 있는 나무나 그루터기는 좌표에 따라 그림에 일부만 나오거나 아예 나오지 않을 수 있다.

입력

입력에는 여러 개의 테스트 케이스가 들어 있고, 파일의 끝까지 이어진다. 각 테스트 케이스의 첫 줄에는 공백으로 구분된 두 정수 MM, NN이 주어진다 (1≤M≤1001 \le M \le 100, 1≤N≤1051 \le N \le 10^5). 이어지는 NN개의 줄에는 서 있는 나무 하나 또는 그루터기 하나를 나타내는 세 정수 SS, XX, YY가 공백으로 구분되어 주어진다. XX와 YY는 나무 뿌리 또는 그루터기의 한가운데 좌표다. S=0S = 0이면 그루터기이고, S>0S > 0이면 높이가 SS인 서 있는 나무다. 0≤S≤90 \le S \le 9, −109≤X,Y≤109-10^9 \le X, Y \le 10^9이다.

서로 다른 두 나무나 그루터기의 부분이 같은 화소에 그려지는 경우는 없다.

출력

각 테스트 케이스마다 빈터 그림이 담긴 캔버스를 출력한다. 캔버스의 맨 위 행을 가장 먼저 출력하고, 맨 아래 행을 마지막으로 출력한다. 출력물은 두께가 화소 하나인 별표 * (아스키 코드 42) 정사각형 테두리로 감싼다. 테두리는 캔버스에 딱 붙어야 한다. 즉, 가로로도 세로로도 테두리와 캔버스 사이에 빈칸이 없어야 한다. 각 테스트 케이스를 출력한 뒤에는 빈 줄을 하나 출력한다.

예제1

  1. 예제 1

    입력
    3 2
    0 5 5
    9 1 0
    8 10
    3 3 2
    0 2 1
    1 -1 -1
    0 -1 2
    3 0 6
    6 4 7
    0 7 4
    3 8 -1
    5 5 -5
    9 2 -10
    
    예상 출력
    *****
    */|\*
    */|\*
    *_|_*
    *****
    
    **********
    *|\._|_..*
    *|_.^....*
    *../|\...*
    *../|\._o*
    *../|\...*
    *_._|_../*
    *._o_.^./*
    *\.^./|\/*
    **********