#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==