#include <unordered_map>
#include <string>
#include <iostream>
#include <ctype.h>
#include <string.h>
#include <iterator>
using namespace std;
class Translator {
public:
void translate(string buffer)
{
for (string::iterator i = buffer.begin(); i != buffer.end(); i++) {
if (isalpha(*i)) {
string s(1, toupper(*i));
if (this->toLeetMap.find(s) != this->toLeetMap.end())
cout << this->toLeetMap[s];
else
cout << toupper(*i);
}
else if (isspace(*i)) {
cout << *i;
}
else if (isdigit(*i)) {
string s(1, toupper(*i));
cout << this->fromLeetMap[s];
}
else if (!isalpha(*i) && !isdigit(*i)) {
string s;
s.push_back(toupper(*i));
int n = 1;
string::iterator j = next(i, n);
while (!isalpha(*j) && !isdigit(*j) && j != buffer.end()) {
s.push_back(toupper(*j));
j++;
}
cout << this->fromLeetMap[s];
}
else {
cout << *i;
}
}
}
private:
unordered_map<string, string> toLeetMap = {
{ "A", "4" },
{ "B", "6" },
{ "E", "3" },
{ "I", "1" },
{ "L", "1" },
{ "M", "(V)" },
{ "N", "(\\)" },
{ "O", "0" },
{ "S", "5" },
{ "T", "7" },
{ "V", "\\/" },
{ "W", "`//" }
};
unordered_map<string, string> fromLeetMap = {
{ "4", "A" },
{ "6", "B" },
{ "3", "E" },
{ "1", "I" },
{ "1", "L" },
{ "(V)", "M" },
{ "(\\)", "N" },
{ "0", "O" },
{ "5", "S" },
{ "7", "T" },
{ "\\/", "V" },
{ "`//", "W" }
};
};
int main()
{
Translator translator;
while (cin) {
string buffer;
getline(cin, buffer);
translator.translate(buffer);
cout << endl;
}
}
ICAgICNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgoJI2luY2x1ZGUgPHN0cmluZz4KCSNpbmNsdWRlIDxpb3N0cmVhbT4KCSNpbmNsdWRlIDxjdHlwZS5oPgoJI2luY2x1ZGUgPHN0cmluZy5oPgoJI2luY2x1ZGUgPGl0ZXJhdG9yPgoKCXVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoJY2xhc3MgVHJhbnNsYXRvciB7CglwdWJsaWM6CgkgICAgdm9pZCB0cmFuc2xhdGUoc3RyaW5nIGJ1ZmZlcikKCSAgICB7CgoJICAgICAgICBmb3IgKHN0cmluZzo6aXRlcmF0b3IgaSA9IGJ1ZmZlci5iZWdpbigpOyBpICE9IGJ1ZmZlci5lbmQoKTsgaSsrKSB7CgkgICAgICAgICAgICBpZiAoaXNhbHBoYSgqaSkpIHsKCSAgICAgICAgICAgICAgICBzdHJpbmcgcygxLCB0b3VwcGVyKCppKSk7CgkgICAgICAgICAgICAgICAgaWYgKHRoaXMtPnRvTGVldE1hcC5maW5kKHMpICE9IHRoaXMtPnRvTGVldE1hcC5lbmQoKSkKCSAgICAgICAgICAgICAgICAgICAgY291dCA8PCB0aGlzLT50b0xlZXRNYXBbc107CgkgICAgICAgICAgICAgICAgZWxzZQoJICAgICAgICAgICAgICAgICAgICBjb3V0IDw8IHRvdXBwZXIoKmkpOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgZWxzZSBpZiAoaXNzcGFjZSgqaSkpIHsKCSAgICAgICAgICAgICAgICBjb3V0IDw8ICppOwoJICAgICAgICAgICAgfQoJICAgICAgICAgICAgZWxzZSBpZiAoaXNkaWdpdCgqaSkpIHsKCSAgICAgICAgICAgICAgICBzdHJpbmcgcygxLCB0b3VwcGVyKCppKSk7CgkgICAgICAgICAgICAgICAgY291dCA8PCB0aGlzLT5mcm9tTGVldE1hcFtzXTsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGVsc2UgaWYgKCFpc2FscGhhKCppKSAmJiAhaXNkaWdpdCgqaSkpIHsKCSAgICAgICAgICAgICAgICBzdHJpbmcgczsKCSAgICAgICAgICAgICAgICBzLnB1c2hfYmFjayh0b3VwcGVyKCppKSk7CgkgICAgICAgICAgICAgICAgaW50IG4gPSAxOwoJICAgICAgICAgICAgICAgIHN0cmluZzo6aXRlcmF0b3IgaiA9IG5leHQoaSwgbik7CgkgICAgICAgICAgICAgICAgd2hpbGUgKCFpc2FscGhhKCpqKSAmJiAhaXNkaWdpdCgqaikgJiYgaiAhPSBidWZmZXIuZW5kKCkpIHsKCSAgICAgICAgICAgICAgICAgICAgcy5wdXNoX2JhY2sodG91cHBlcigqaikpOwoJICAgICAgICAgICAgICAgICAgICBqKys7CgkgICAgICAgICAgICAgICAgfQoJICAgICAgICAgICAgICAgIGNvdXQgPDwgdGhpcy0+ZnJvbUxlZXRNYXBbc107CgkgICAgICAgICAgICB9CgkgICAgICAgICAgICBlbHNlIHsKCSAgICAgICAgICAgICAgICBjb3V0IDw8ICppOwoJICAgICAgICAgICAgfQoJICAgICAgICB9CgkgICAgfQoKCXByaXZhdGU6CgkgICAgdW5vcmRlcmVkX21hcDxzdHJpbmcsIHN0cmluZz4gdG9MZWV0TWFwID0gewoJICAgICAgICB7ICJBIiwgIjQiIH0sCgkgICAgICAgIHsgIkIiLCAiNiIgfSwKCSAgICAgICAgeyAiRSIsICIzIiB9LAoJICAgICAgICB7ICJJIiwgIjEiIH0sCgkgICAgICAgIHsgIkwiLCAiMSIgfSwKCSAgICAgICAgeyAiTSIsICIoVikiIH0sCgkgICAgICAgIHsgIk4iLCAiKFxcKSIgfSwKCSAgICAgICAgeyAiTyIsICIwIiB9LAoJICAgICAgICB7ICJTIiwgIjUiIH0sCgkgICAgICAgIHsgIlQiLCAiNyIgfSwKCSAgICAgICAgeyAiViIsICJcXC8iIH0sCgkgICAgICAgIHsgIlciLCAiYC8vIiB9CgkgICAgfTsKCSAgICB1bm9yZGVyZWRfbWFwPHN0cmluZywgc3RyaW5nPiBmcm9tTGVldE1hcCA9IHsKCSAgICAgICAgeyAiNCIsICJBIiB9LAoJICAgICAgICB7ICI2IiwgIkIiIH0sCgkgICAgICAgIHsgIjMiLCAiRSIgfSwKCSAgICAgICAgeyAiMSIsICJJIiB9LAoJICAgICAgICB7ICIxIiwgIkwiIH0sCgkgICAgICAgIHsgIihWKSIsICJNIiB9LAoJICAgICAgICB7ICIoXFwpIiwgIk4iIH0sCgkgICAgICAgIHsgIjAiLCAiTyIgfSwKCSAgICAgICAgeyAiNSIsICJTIiB9LAoJICAgICAgICB7ICI3IiwgIlQiIH0sCgkgICAgICAgIHsgIlxcLyIsICJWIiB9LAoJICAgICAgICB7ICJgLy8iLCAiVyIgfQoJICAgIH07Cgl9OwoKCWludCBtYWluKCkKCXsKCSAgICBUcmFuc2xhdG9yIHRyYW5zbGF0b3I7CgoJICAgIHdoaWxlIChjaW4pIHsKCgkgICAgICAgIHN0cmluZyBidWZmZXI7CgkgICAgICAgIGdldGxpbmUoY2luLCBidWZmZXIpOwoJICAgICAgICB0cmFuc2xhdG9yLnRyYW5zbGF0ZShidWZmZXIpOwoJICAgICAgICBjb3V0IDw8IGVuZGw7CgkgICAgfQoJfQ==