#include long m; char a[150][150]; void tree(long z, long x, long y) { long h; if (x < -1 || y + z + 1< 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(long x, long 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() { long n, z, x, y; while (scanf(" %ld %ld", &m, &n) == 2) { for (long i = 0; i < m; i++) { for (long j = 0; j < m; j++) a[i][j] = '.'; } for (long k = 0; k < n; k++) { scanf(" %ld %ld %ld", &z, &x, &y); if (z == 0) stall(x, y); else tree(z, x, y); } for (long i = 0; i < m + 2; i++) putchar('*'); putchar('\n'); for (long i = 0; i < m; i++) { putchar('*'); for (long j = 0; j < m; j++) putchar(a[j][m - 1 - i]); putchar('*'); putchar('\n'); } for (long i = 0; i < m + 2; i++) putchar('*'); putchar('\n'); } return 0; }