#include #include using namespace std; vector > picture; int m, n; int min(int x, int y){ return x < y ? x : y; } void draw(){ for(int i = 0; i < m+2; i++){ for(int u = 0; u < m+2; u++){ printf("%c", picture[i][u]); } printf("\n"); } } void putStrump(int x, int y){ //printf("!! %d %d\n", x, y); if(x < m+1 && y-1 < m+1 && x >= 0 && y > 0){ picture[x][y-1] = '_'; } if(x < m+1 && y < m+1 && x >= 0 && y >= 0){ picture[x][y] = 'o'; } if(x < m+1 && y+1 < m+1 && x >= 0 && y >= 0){ picture[x][y+1] = '_'; } } void putRoots(int x, int y){ if(x < m+1 && y-1 < m+1 && x >= 0 && y > 0){ picture[x][y-1] = '_'; } if(x < m+1 && y < m+1 && x >= 0 && y >= 0){ picture[x][y] = '|'; } if(x < m+1 && y+1 < m+1 && x >= 0 && y >= 0){ picture[x][y+1] = '_'; } } void putTrunk( int x, int y, int h){ for(int i = 0; i < h; i++){ x--; if(x < m+1 && y-1 < m+1 && x >= 0 && y > 0){ picture[x][y-1] = '/'; } if(x < m+1 && y < m+1 && x >= 0 && y >= 0){ picture[x][y] = '|'; } if(x < m+1 && y+1 < m+1 && x >= 0 && y >= 0){ picture[x][y+1] = '\\'; } } } void putTop( int x, int y){ if(x < m+1 && y+1 < m+1 && x >= 0 && y >= 0){ picture[x][y] = '^'; } } void putTree( int x, int y, int h){ //printf("putting tree at: %d %d h: %d\n", x, y, h); if(x > -1 && y > -1){ putRoots(x, y); putTrunk(x, y, h); putTop(x-h-1, y); } } int main(){ while(scanf("%d %d", &m, &n)+1){ picture.resize(m+2, vector(m+2, '.')); for(int i = 0; i < n; i++){ int x, y, h; scanf("%d %d %d", &h, &x, &y); if(h == 0) putStrump(m-y, x+1); else putTree(m-y, x+1, h); } for(int i = 0; i < m+2; i++) picture[0][i] = '*'; for(int i = 0; i < m+2; i++) picture[m+1][i] = '*'; for(int i = 0; i < m+2; i++) picture[i][0] = '*'; for(int i = 0; i < m+2; i++) picture[i][m+1] = '*'; draw(); printf("\n"); picture.clear(); } return 0; }