#include <stdio.h>

main(int argc, char **argv)
{
	int             c;
	FILE           *in;

	if (argc == 1) {
		in = stdin;
	} else if (argc == 2) {
		in = fopen(argv[1], "r");
		if (!in) {
			printf("error open file\n");
			exit(0);
		}
	} else {
		printf("error reading input\n");
		exit(0);
	}

	while (!feof(in)) {
		c = fgetc(in);
		if (c == 0xff) {
			//printf("[IAC]");
			c = fgetc(in);
			if (c == 0xf1) {
				//printf("[NOP]");
			} else if (c == 0xf2) {
				//printf("[DM]");
			} else if (c == 0xf3) {
				//printf("[BRK]");
			} else if (c == 0xf4) {
				//printf("[IP]");
			} else if (c == 0xf5) {
				//printf("[AO]");
			} else if (c == 0xf6) {
				//printf("[AYT]");
			} else if (c == 0xf7) {
				//printf("[EC]");
			} else if (c == 0xf8) {
				//printf("[EA]");
			} else if (c == 0xf9) {
				//printf("[GA]");
			} else if (c == 0xfa) {
				//printf("[SB]");
				while (1) {
					c = fgetc(in);
					if (c == 0xff) {
						//printf("[IAC]");
						c = fgetc(in);
						if (c == 0xf0) {
							//printf("[SE]");
							break;
						} else {
							//printf("[%d]", c);
						}
					} else {
						//printf("[%d]", c);
					}
				}
			} else if (c == 0xfb) {
				//printf("[WILL]");
				c = fgetc(in);
				//printf("[%d]", c);
			} else if (c == 0xfc) {
				//printf("[WONT]");
				c = fgetc(in);
				//printf("[%d]", c);
			} else if (c == 0xfd) {
				//printf("[DO]");
				c = fgetc(in);
				//printf("[%d]", c);
			} else if (c == 0xfe) {
				//printf("[DONT]");
				c = fgetc(in);
				//printf("[%d]", c);
			} else if (c == 0xff) {
				//printf("[IAC]");
			} else {
				//printf("[%d]", c);
			}
		} else if (c == 0) {
			//printf("[NULL]");
		} else if (c >= 1 && c <= 26) {
			printf("[%c[1;31m^%c%c[0m]", 27, c + 'A' - 1, 27);
		} else if (c == 27) {
			c = fgetc(in);
			//printf("[%d]", c);
			c = fgetc(in);
			if (c == 'A') {
				printf("[%c[1;32m^%c[0m]", 27, 27);
			} else if (c == 'B') {
				printf("[%c[1;32mV%c[0m]", 27, 27);
			} else if (c == 'C') {
				printf("[%c[1;32m>%c[0m]", 27, 27);
			} else if (c == 'D') {
				printf("[%c[1;32m<%c[0m]", 27, 27);
			} else {
				//printf("[%d]", c);
			}
		} else if (c == 32) {
			printf("[%c[1;33mSPACE%c[0m]", 27, 27);
		} else if (c >= 160 && c <= 254) {
			printf("[%c[1;34m%c", 27, c);
			c = fgetc(in);
			printf("%c%c[0m]", c, 27);
		} else if (c == -1) {
			//printf("[EOF]");
		} else {
			printf("[%c[1;33m%c%c[0m]", 27, c, 27);
		}
	}
}

