#include int m; char a[150][150]; void tree(int z, int x, int y) { int h; if (x < -1 || y + z < 0) return; if (x > m || y > m-1) return; // bottom of tree if (x >= 0 && x < m && y >= 0 && y < m) a[x][y] = '|'; if (x - 1 >= 0 && y >= 0 && y < m) a[x-1][y] = '_'; if (x + 1 < m && y >= 0 && y < m) a[x+1][y] = '_'; for (h = y + 1; h <= (y + z); h++) { if (h < 0) continue; if (h >= m) break; if (x >= 0 && x < m) a[x][h] = '|'; if (x - 1 >= 0) a[x-1][h] = '/'; if (x + 1 < m) a[x+1][h] = '\\'; } // top of the tree if (x >= 0 && x < m && (y + z + 1 < m)) a[x][y+z+1] = '^'; } void stall(int x, int y) { if (x < -1 || y < 0) return; if (x > m || y > m-1) return; if (x >= 0 && x < m) a[x][y] = 'o'; if (x - 1 >= 0) a[x-1][y] = '_'; if (x + 1 < m) a[x+1][y] = '_'; } int main() { int n, z, x, y; while (scanf(" %d %d", &m, &n) == 2) { for (int i = 0; i < m; i++) { for (int j = 0; j < m; j++) a[i][j] = '.'; } for (int k = 0; k < n; k++) { scanf(" %d %d %d", &z, &x, &y); if (z == 0) stall(x, y); else tree(z, x, y); } for (int i = 0; i < m + 2; i++) putchar('*'); putchar('\n'); for (int i = 0; i < m; i++) { putchar('*'); for (int j = 0; j < m; j++) putchar(a[j][m - 1 - i]); putchar('*'); putchar('\n'); } for (int i = 0; i < m + 2; i++) putchar('*'); putchar('\n'); } return 0; }