#include <iostream>
#include <cstdlib>
#include <string.h>
#include <cstring>
#include<string>
using namespace std;
char * Library( char letter )
{
//cout << "IN library" << endl;
char * morseCode;
//delete morsecode
switch ( letter )
{
case 'A': morseCode = new char [3]; strcpy(morseCode, ".-");break;
case 'B': morseCode = new char [5]; strcpy(morseCode, "-...");break;
case 'C': morseCode = new char [5]; strcpy(morseCode, "-.-.");break;
case 'D': morseCode = new char [4]; strcpy(morseCode, "-..");break;
case 'E': morseCode = new char [2]; strcpy(morseCode, ".");break;
case 'F': morseCode = new char [5]; strcpy(morseCode, "..-.");break;
case 'G': morseCode = new char [4]; strcpy(morseCode, "--.");break;
case 'H': morseCode = new char [5]; strcpy(morseCode, "....");break;
case 'I': morseCode = new char [3]; strcpy(morseCode, "..");break;
case 'J': morseCode = new char [5]; strcpy(morseCode, ".---");break;
case 'K': morseCode = new char [4]; strcpy(morseCode, "-.-");break;
case 'L': morseCode = new char [5]; strcpy(morseCode, ".-..");break;
case 'M': morseCode = new char [3]; strcpy(morseCode, "--");break;
case 'N': morseCode = new char [3]; strcpy(morseCode, "-.");break;
case 'O': morseCode = new char [4]; strcpy(morseCode, "---");break;
case 'P': morseCode = new char [5]; strcpy(morseCode, ".--.");break;
case 'Q': morseCode = new char [5]; strcpy(morseCode, "--.-");break;
case 'R': morseCode = new char [4]; strcpy(morseCode, ".-.");break;
case 'S': morseCode = new char [4]; strcpy(morseCode, "...");break;
case 'T': morseCode = new char [2]; strcpy(morseCode, "-");break;
case 'U': morseCode = new char [4]; strcpy(morseCode, "..-");break;
case 'V': morseCode = new char [5]; strcpy(morseCode, "...-");break;
case 'W': morseCode = new char [4]; strcpy(morseCode, ".--");break;
case 'X': morseCode = new char [5]; strcpy(morseCode, "-..-");break;
case 'Y': morseCode = new char [5]; strcpy(morseCode, "-.--");break;
case 'Z': morseCode = new char [5]; strcpy(morseCode, "--..");break;
case '_': morseCode = new char [5]; strcpy(morseCode, "..--");break;
case ',': morseCode = new char [5]; strcpy(morseCode, ".-.-");break;
case '.': morseCode = new char [5]; strcpy(morseCode, "---.");break;
case '?': morseCode = new char [5]; strcpy(morseCode, "----");break;
}
//cout << "Getting out of library" << endl;
return morseCode;
}
char Library2 (char * decoded) {
if (!strcmp(decoded, ".-")) return 'A';
else if (!strcmp(decoded, "-...")) return 'B';
else if (!strcmp(decoded, "-.-.")) return 'C';
else if (!strcmp(decoded, "-..")) return 'D';
else if (!strcmp(decoded, ".")) return 'E';
else if (!strcmp(decoded, "..-.")) return 'F';
else if (!strcmp(decoded, "--.")) return 'G';
else if (!strcmp(decoded, "....")) return 'H';
else if (!strcmp(decoded, "..")) return 'I';
else if (!strcmp(decoded, ".---")) return 'J';
else if (!strcmp(decoded, "-.-")) return 'K';
else if (!strcmp(decoded, ".-..")) return 'L';
else if (!strcmp(decoded, "--")) return 'M';
else if (!strcmp(decoded, "-.")) return 'N';
else if (!strcmp(decoded, "---")) return 'O';
else if (!strcmp(decoded, ".--.")) return 'P';
else if (!strcmp(decoded, "--.-")) return 'Q';
else if (!strcmp(decoded, ".-.")) return 'R';
else if (!strcmp(decoded, "...")) return 'S';
else if (!strcmp(decoded, "-")) return 'T';
else if (!strcmp(decoded, "..-")) return 'U';
else if (!strcmp(decoded, "...-")) return 'V';
else if (!strcmp(decoded, ".--")) return 'W';
else if (!strcmp(decoded, "-..-")) return 'X';
else if (!strcmp(decoded, "-.--")) return 'Y';
else if (!strcmp(decoded, "--..")) return 'Z';
else if (!strcmp(decoded, "..--")) return '_';
else if (!strcmp(decoded, ".-.-")) return ',';
else if (!strcmp(decoded, "---.")) return '.';
else if (!strcmp(decoded, "----")) return '?';
return '!';
}
string breakDown( string inputString )
{
char * morseArray = new char[4000];
int * numberArray = new int [1000];
const char * letter = inputString.c_str();
int letterRead = 0;
int morseInUse = 0;
while ( letter[letterRead] != '\0' )
{
//cout << "pismeno> " << letter[letterRead] << endl;
char * morseCode;
morseCode = Library( letter[letterRead] );
int morseLength = strlen( morseCode );
numberArray[letterRead++] = morseLength;
strncpy( morseArray + morseInUse, morseCode, morseLength);
morseInUse += morseLength;
//cout << morseCode << endl;
delete [] morseCode;
}
//Ukonceno cteni
char * decoded = new char [5];
string result = "";
int readSymbol = 0;
for (int i = letterRead - 1; i >= 0; i--) {
//cout << "NA> " << numberArray[i] << endl;
strncpy (decoded, morseArray + readSymbol, numberArray[i]);
decoded[numberArray[i]] = '\0';
//cout << "decoded> " << decoded << endl;
readSymbol += numberArray[i];
char dec =Library2(decoded);
//cout << "char> " << dec << endl;
result += dec;
}
delete [] decoded;
delete [] morseArray;
delete [] numberArray;
return result;
}
int main ()
{
string str = "";
while (getline(cin,str)) {
cout << breakDown(str) << endl;
}
return 0 ;
}