#include <stdio.h>
void quote(char *txt) {
for (; *txt; txt++) {
switch (*txt) {
case '"' : printf("\\\"") ; break;
case '\n': printf("\\n") ; break;
case '\t': printf("\\t") ; break;
case '\\': printf("\\\\") ; break;
default : printf("%c", *txt);
}
}
}
void quine(char *plan) {
char *p;
for (p = plan; *p; p++) {
if (*p == 33)
quote(plan);
else
printf("%c", *p);
}
}
char plan[] = "#include <stdio.h>\n\nvoid quote(char *txt) {\n\tfor (; *txt; txt++) {\n\t\tswitch (*txt) {\n\t\t\tcase '\"' : printf(\"\\\\\\\"\") ; break;\n\t\t\tcase '\\n': printf(\"\\\\n\") ; break;\n\t\t\tcase '\\t': printf(\"\\\\t\") ; break;\n\t\t\tcase '\\\\': printf(\"\\\\\\\\\") ; break;\n\t\t\tdefault : printf(\"%c\", *txt);\n\t\t}\n\t}\n}\n\nvoid quine(char *plan) {\n\tchar *p;\n\tfor (p = plan; *p; p++) {\n\t\tif (*p == 33)\n\t\t\tquote(plan);\n\t\telse\n\t\t\tprintf(\"%c\", *p);\n\t}\n}\n\nchar plan[] = \"!\";\n\nint main(void) {\n\tquine(plan);\n\treturn 0;\n}\n";
int main(void) {
quine(plan);
return 0;
}