#include <stdio.h>
#include <stdlib.h>

#define X 200
#define Y 200

void doprint(int x,int y,int dx,int dy);
void invslope(int x,int y,int dx,int dy);
void rwing(int x,int y,int dx,int dy);
void lwing(int x,int y,int dx,int dy);

char *grid[Y];
int z;

main(int argc,char *argv[])
{
	int i,j;

	printf("#ifdef COLOR\n#undef COLOR\n#endif\n");
	printf("#define COLOR yellow\n");

	z=atoi(argv[1]);

	for (i=0;i<Y;++i) {
		grid[i]=(char *)malloc(X+1);
		if (grid[i]==NULL) {
			fprintf(stderr,"malloc() failed! (row %d)\n",i);
			exit(1);
		}
		for(j=0;j<=X;++j)grid[i][j]=0;
		gets(grid[i]);
	}

	for (i=0;i<Y;++i) {
		for(j=0;j<X;++j) {
			char c;

			c=grid[i][j];
			if (c>1 && c!=' ') {
				int x=1,y=1;
				int a,b;

				while(grid[i][j+x]==c)++x;
				while(grid[i+y][j]==c)++y;
				if (c=='~') invslope(j,i,x,y);
				else if (c=='<') lwing(j,i,x,y);
				else if (c=='>') rwing(j,i,x,y);
				else doprint(j,i,x,y);
				for(a=0;a<x;++a)for(b=0;b<y;++b) {
					grid[i+b][j+a]=1;
				}
			}
		}
	}
	return(0);
}

void doprint(int x,int y,int dx,int dy)
{
	if (dx==1 && dy==1) {
		printf("COLOR\tb%dx%d\ts1@%d,%d,%d\n",dy,dx,x,y,z);
	}
	else if (dx<=dy) {
		printf("COLOR\tb%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dx,dy,x,y,z,x+1,y,z);
	}
	else if (dy==1) {
		printf("COLOR\tb%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dy,dx,x,y,z,x,y-1,z);
	}
	else {
		printf("COLOR\tb%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dy,dx,x,y+1,z,x,y,z);
	}
}

void invslope(int x,int y,int dx,int dy)
{
	if (grid[y][x]!='~') {
		fprintf(stderr,"%d,%d -> %d,%d\n",x,y,dx,dy);
		fprintf(stderr,"~%c\n%c\n",grid[y][x+1],grid[y+1][x]);
		fprintf(stderr,"Reality failure 1\n");
		exit(1);
	}
	if (grid[y+dy-1][x+dx-1]!='~') {
		fprintf(stderr,"%d,%d -> %d,%d\n",x,y,dx,dy);
		fprintf(stderr,"~%c\n%c\n",grid[y][x+1],grid[y+1][x]);
		fprintf(stderr,"%d\t%s\n",y,grid[y]+x);
		fprintf(stderr,"%d\t%s\n",y+1,grid[y+1]+x);
		fprintf(stderr,"Reality failure 2\n");
		exit(2);
	}
	if (dx==1 && dy==4) {
		printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x+1,y,z);
		printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+3,z,x-1,y+3,z);
	}
	else if (dx==4 && dy==1) {
		printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x,y-1,z);
		printf("COLOR\tu1x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+3,y,z,x+3,y+1,z);
	}
	else if (dx==1) {
		if (grid[y+dy][x]&& grid[y+dy][x]!=' ') {
			printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dx,dy,x,y+1,z,x-1,y+1,z);
		}
		else {
			printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dx,dy,x,y,z,x+1,y,z);
		}
	}
	else if (dy==1) {
		if (grid[y][x+dx]&& grid[y][x+dx]!=' ') {
			printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dy,dx,x+1,y,z,x+1,y+1,z);
		}
		else {
			printf("COLOR\tu%dx%d\ts1@%d,%d,%d\ts2@%d,%d,%d\n",dy,dx,x,y,z,x,y-1,z);
		}
	}
	else if (dx!=2 || dy!=2) {
		fprintf(stderr,"Unable to deal with %dx%d slope\n",dx,dy);
		exit(1);
	}
	else if ((grid[y+dy][x]&&grid[y+dy][x]!=' ' && grid[y+dy][x+1]&&grid[y+dy][x+1]!=' ')) {
		printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+1,y+1,z,x,y+1,z);
	}
	else if ((grid[y-1][x]&&grid[y-1][x]!=' ' && grid[y-1][x+1]&&grid[y-1][x+1]!=' ')) {
		printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x+1,y,z);
	}
	else if ((grid[y][x+dx]&&grid[y][x+dx]!=' ' && grid[y][x+dx]&&grid[y][x+dx]!=' ')) {
		printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+1,y,z,x+1,y+1,z);
	}
	else if ((grid[y][x-1]&&grid[y][x-1]!=' ' && grid[y][x-1]&&grid[y][x-1]!=' ')) {
		printf("COLOR\tu2x2\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+1,z,x,y,z);
	}
	else {
		fprintf(stderr,"Unable to deal with this %dx%d slope\n",dx,dy);
		exit(1);
	}
}

void rwing(int x,int y,int dx,int dy) /* '>' */
{
	if (dx==3 && dy==8) {
		if (grid[y+6][x+1]==' ') {
			printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x+1,y,z);
		}
		else {
			printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+2,y+7,z,x+1,y+7,z);
		}
	}
	else if (dx==8 && dy==3) {
		if (grid[y+1][x+6]==' ') {
			printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+2,z,x,y+1,z);
		}
		else {
			printf("COLOR\tr4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+7,y,z,x+7,y+1,z);
		}
	}
}

void lwing(int x,int y,int dx,int dy) /* '<' */
{
	if (dx==3 && dy==8) {
		if (grid[y+6][x+1]==' ') {
			printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+2,y,z,x+3,y,z);
		}
		else {
			printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y+7,z,x-1,y+7,z);
		}
	}
	else if (dx==8 && dy==3) {
		if (grid[y+1][x+6]==' ') {
			printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x,y,z,x,y-1,z);
		}
		else {
			printf("COLOR\tl4x8\ts1@%d,%d,%d\ts2@%d,%d,%d\n",x+7,y+2,z,x+7,y+3,z);
		}
	}
}
