/*
* File: fs.c
* Author: cteam048
*
* Created on October 19, 2013, 12:45 PM
*/
#include <iostream>
#include <string>
#include <stack>
using namespace std;
class M {
public:
string code;
int len;
M(string fcode, int flen);
};
M::M(string fcode1, int flen1) {
code = fcode1;
len = flen1;
}
M *CharToMorse(char znak) {
if (znak == 'A') return new M(".-", 2);
if (znak == 'B') return new M("-...", 4);
if (znak == 'C') return new M("-.-.", 4);
if (znak == 'D') return new M("-..", 3);
if (znak == 'E') return new M(".", 1);
if (znak == 'F') return new M("..-.", 4);
if (znak == 'G') return new M("--.", 3);
if (znak == 'H') return new M("....", 4);
if (znak == 'I') return new M("..", 2);
if (znak == 'J') return new M(".---", 4);
if (znak == 'K') return new M("-.-", 3);
if (znak == 'L') return new M(".-..", 4);
if (znak == 'M') return new M("--", 2);
if (znak == 'N') return new M("-.", 2);
if (znak == 'O') return new M("---", 3);
if (znak == 'P') return new M(".--.", 4);
if (znak=='Q') return new M("--.-", 4);
if (znak == 'R') return new M(".-.", 3);
if (znak == 'S') return new M("...", 3);
if (znak == 'T') return new M("-", 1);
if (znak == 'U') return new M("..-", 3);
if (znak == 'V') return new M("...-", 4);
if (znak == 'W') return new M(".--", 3);
if (znak == 'X') return new M("-..-", 4);
if (znak == 'Y') return new M("-.--", 4);
if (znak == 'Z') return new M("--..", 4);
if (znak == '_') return new M("..--", 4);
if (znak == ',') return new M(".-.-", 4);
if (znak == '.') return new M("---.", 4);
if (znak == '?') return new M("----", 4);
return NULL;
};
string MorseToChar(string znak) {
if (znak == ".-") return "A";
if (znak == "-...") return "B";
if (znak == "-.-.") return "C";
if (znak == "-..") return "D";
if (znak == ".") return "E";
if (znak == "..-.")return "F";
if (znak == "--.")return "G";
if (znak == "....")return "H";
if (znak == "..")return "I";
if (znak == ".---")return "J";
if (znak == "-.-")return "K";
if (znak == ".-..")return "L";
if (znak == "--")return "M";
if (znak == "-.")return "N";
if (znak == "---")return "O";
if (znak == ".--.")return "P";
if (znak == "--.-")return "Q";
if (znak == ".-.")return "R";
if (znak == "...")return "S";
if (znak == "-")return "T";
if (znak == "..-")return "U";
if (znak == "...-")return "V";
if (znak == ".--")return "W";
if (znak == "-..-")return "X";
if (znak == "-.--")return "Y";
if (znak == "--..")return "Z";
if (znak == "..--")return "_";
if (znak == ".-.-")return ",";
if (znak == "---.")return ".";
if (znak == "----")return "?";
return NULL;
};
int main() {
string line;
string morse;
stack<int> cisla;
while (cin >> line ) {
for (unsigned int i = 0; i < line.size(); i++) {
M *z = CharToMorse(line[i]);
morse += z->code;
cisla.push(z->len);
}
/**-----*/
string vysledek;
unsigned int c = 0;
while (c< morse.size()){
string znak;
int laz = cisla.top();
for (int i = 0; i < laz; ++i) {
znak +=morse[c];
c++;
}
vysledek+=MorseToChar(znak);
cisla.pop();
}
cout << vysledek << endl;
}
/*********/
/*********/
return 0;
}