숲 그림 그리기

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

보통4구현시뮬레이션배열기하아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

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

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

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

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

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

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

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

입력

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

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

출력

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