#include using namespace std; using IMG = vector>; void print_dot(IMG& img, int M, long long X, long long Y, char ch) { if (X < M && X >=0 && Y < M && Y >= 0) { img[(int)X][M-(int)Y-1] = ch; } } void print_tree(IMG& img, int M, long long S, long long X, long long Y) { // root print_dot(img, M, X, Y, '|'); print_dot(img, M, X-1, Y, '_'); print_dot(img, M, X+1, Y, '_'); //trunk for (int i = 0; i < S; ++i) { print_dot(img, M, X, Y+i+1, '|'); print_dot(img, M, X-1, Y+i+1, '/'); print_dot(img, M, X+1, Y+i+1, '\\'); } //treetop print_dot(img, M, X, Y+S+1, '^'); } void print_tree_stump(IMG& img, int M, long long X, long long Y) { print_dot(img, M, X, Y, 'o'); print_dot(img, M, X-1, Y, '_'); print_dot(img, M, X+1, Y, '_'); } void solve(int M, int N) { vector> img(M, vector(M, '.')); for (int i = 0; i < N; ++i) { long long S, X, Y; cin >> S >> X >> Y; if (S) print_tree(img, M, S, X, Y); else print_tree_stump(img, M, X, Y); } int BRD = M+2; for (int i = 0; i < BRD; ++i) { cout << '*'; } cout << '\n'; for (int j = 0; j < M; ++j) { cout << '*'; for (int i = 0; i < M; ++i) { cout << img[i][j]; } cout << "*\n"; } for (int i = 0; i < BRD; ++i) { cout << '*'; } cout << '\n'; } int main(){ std::ios::sync_with_stdio(false); int M; while(cin >> M){ int N; cin >> N; solve(M, N); cout << '\n'; } }