#include /* Russian UTF-8 => translit; English letters, \, and ' are placed in backquotes ` Backquotes ` are replaced by \` */ struct letter { int byte1; int byte2; char name [3]; }; struct letter letter [] = { {0xd0, 0x81, "Yo"}, {0xd0, 0x90, "A"}, {0xd0, 0x91, "B"}, {0xd0, 0x92, "V"}, {0xd0, 0x93, "G"}, {0xd0, 0x94, "D"}, {0xd0, 0x95, "E"}, {0xd0, 0x96, "Zh"}, {0xd0, 0x97, "Z"}, {0xd0, 0x98, "I"}, {0xd0, 0x99, "J"}, {0xd0, 0x9a, "K"}, {0xd0, 0x9b, "L"}, {0xd0, 0x9c, "M"}, {0xd0, 0x9d, "N"}, {0xd0, 0x9e, "O"}, {0xd0, 0x9f, "P"}, {0xd0, 0xa0, "R"}, {0xd0, 0xa1, "S"}, {0xd0, 0xa2, "T"}, {0xd0, 0xa3, "U"}, {0xd0, 0xa4, "F"}, {0xd0, 0xa5, "X"}, {0xd0, 0xa6, "C"}, {0xd0, 0xa7, "Ch"}, {0xd0, 0xa8, "Sh"}, {0xd0, 0xa9, "S#"}, {0xd0, 0xaa, "Q"}, {0xd0, 0xab, "W"}, {0xd0, 0xac, "\\'"}, {0xd0, 0xad, "Eh"}, {0xd0, 0xae, "Yu"}, {0xd0, 0xaf, "Ya"}, {0xd0, 0xb0, "a"}, {0xd0, 0xb1, "b"}, {0xd0, 0xb2, "v"}, {0xd0, 0xb3, "g"}, {0xd0, 0xb4, "d"}, {0xd0, 0xb5, "e"}, {0xd0, 0xb6, "zh"}, {0xd0, 0xb7, "z"}, {0xd0, 0xb8, "i"}, {0xd0, 0xb9, "j"}, {0xd0, 0xba, "k"}, {0xd0, 0xbb, "l"}, {0xd0, 0xbc, "m"}, {0xd0, 0xbd, "n"}, {0xd0, 0xbe, "o"}, {0xd0, 0xbf, "p"}, {0xd1, 0x80, "r"}, {0xd1, 0x81, "s"}, {0xd1, 0x82, "t"}, {0xd1, 0x83, "u"}, {0xd1, 0x84, "f"}, {0xd1, 0x85, "x"}, {0xd1, 0x86, "c"}, {0xd1, 0x87, "ch"}, {0xd1, 0x88, "sh"}, {0xd1, 0x89, "s#"}, {0xd1, 0x8a, "q"}, {0xd1, 0x8b, "w"}, {0xd1, 0x8c, "'"}, {0xd1, 0x8d, "eh"}, {0xd1, 0x8e, "yu"}, {0xd1, 0x8f, "ya"}, {0xd1, 0x91, "yo"} }; main () { int next, after, i; next = getchar (); while (next != EOF) { after = getchar (); for (i=0; i<66; i++) { if (letter[i].byte1 == next && letter[i].byte2 == after) { printf ("%s", letter[i].name); next = getchar (); break; } } if (i == 66) /* not found */ { int print_backquotes; print_backquotes = (next == '\'' || next == '\\' || ('a' <= next && next <= 'z') || ('A' <= next && next <= 'Z')); if (print_backquotes) { putchar ('`'); } if (next == '`') { putchar ('\\'); } putchar (next); if (print_backquotes) { putchar ('`'); } next = after; } } }