#include <iostream>
#include <map>
static std::map<std::string, char> const MorseMap = {
{".-", 'A'},
{"-...", 'B'},
{"-.-.", 'C'},
{"-..", 'D'},
{".", 'E'},
{".._.", 'F'},
{"--.", 'G'},
{"....", 'H'},
{"..", 'I'},
{".---", 'J'},
{"-.-", 'K'},
{".-..", 'L'},
{"--", 'M'},
{"-.", 'N'},
{"---", 'O'},
{".--.", 'P'},
{"--.-", 'Q'},
{".-.", 'R'},
{"...", 'S'},
{"-", 'T'},
{"..-", 'U'},
{"...-", 'V'},
{".--", 'W'},
{"-..-", 'X'},
{"-.--", 'Y'},
{"--..", 'Z'},
{"-----", '0'},
{".----", '1'},
{"..---", '2'},
{"...--", '3'},
{"....-", '4'},
{".....", '5'},
{"-....", '6'},
{"--...", '7'},
{"---..", '8'},
{"----.", '9'}
};
void convert(std::istream& morse, std::ostream& regular) {
std::string buffer;
while (morse >> buffer) {
auto const it = MorseMap.find(buffer);
if (it == MorseMap.end()) { regular << '?'; continue; }
regular << it->second;
}
}
int main() {
convert(std::cin, std::cout);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWFwPgoKc3RhdGljIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjaGFyPiBjb25zdCBNb3JzZU1hcCA9IHsKICAgIHsiLi0iLCAgICAnQSd9LAogICAgeyItLi4uIiwgICdCJ30sCiAgICB7Ii0uLS4iLCAgJ0MnfSwKICAgIHsiLS4uIiwgICAnRCd9LAogICAgeyIuIiwgICAgICdFJ30sCiAgICB7Ii4uXy4iLCAgJ0YnfSwKICAgIHsiLS0uIiwgICAnRyd9LAogICAgeyIuLi4uIiwgICdIJ30sCiAgICB7Ii4uIiwgICAgJ0knfSwKICAgIHsiLi0tLSIsICAnSid9LAogICAgeyItLi0iLCAgICdLJ30sCiAgICB7Ii4tLi4iLCAgJ0wnfSwKICAgIHsiLS0iLCAgICAnTSd9LAogICAgeyItLiIsICAgICdOJ30sCiAgICB7Ii0tLSIsICAgJ08nfSwKICAgIHsiLi0tLiIsICAnUCd9LAogICAgeyItLS4tIiwgICdRJ30sCiAgICB7Ii4tLiIsICAgJ1InfSwKICAgIHsiLi4uIiwgICAnUyd9LAogICAgeyItIiwgICAgICdUJ30sCiAgICB7Ii4uLSIsICAgJ1UnfSwKICAgIHsiLi4uLSIsICAnVid9LAogICAgeyIuLS0iLCAgICdXJ30sCiAgICB7Ii0uLi0iLCAgJ1gnfSwKICAgIHsiLS4tLSIsICAnWSd9LAogICAgeyItLS4uIiwgICdaJ30sCiAgICB7Ii0tLS0tIiwgJzAnfSwKICAgIHsiLi0tLS0iLCAnMSd9LAogICAgeyIuLi0tLSIsICcyJ30sCiAgICB7Ii4uLi0tIiwgJzMnfSwKICAgIHsiLi4uLi0iLCAnNCd9LAogICAgeyIuLi4uLiIsICc1J30sCiAgICB7Ii0uLi4uIiwgJzYnfSwKICAgIHsiLS0uLi4iLCAnNyd9LAogICAgeyItLS0uLiIsICc4J30sCiAgICB7Ii0tLS0uIiwgJzknfQp9OwoKdm9pZCBjb252ZXJ0KHN0ZDo6aXN0cmVhbSYgbW9yc2UsIHN0ZDo6b3N0cmVhbSYgcmVndWxhcikgewogICAgc3RkOjpzdHJpbmcgYnVmZmVyOwogICAgd2hpbGUgKG1vcnNlID4+IGJ1ZmZlcikgewogICAgICAgIGF1dG8gY29uc3QgaXQgPSBNb3JzZU1hcC5maW5kKGJ1ZmZlcik7CgogICAgICAgIGlmIChpdCA9PSBNb3JzZU1hcC5lbmQoKSkgeyByZWd1bGFyIDw8ICc/JzsgY29udGludWU7IH0KCiAgICAgICAgcmVndWxhciA8PCBpdC0+c2Vjb25kOwogICAgfQp9CgppbnQgbWFpbigpIHsKCWNvbnZlcnQoc3RkOjpjaW4sIHN0ZDo6Y291dCk7CglyZXR1cm4gMDsKfQ==