#include <iostream>
#include <map>
#include <string>
#include <vector>

using namespace std;

map<char, string> map1 = {
    {'A', "00000"}, {'B', "00001"}, {'C', "00010"},  {'D', "00011"},
    {'E', "00100"}, {'F', "00101"}, {'G', "00110"},  {'H', "00111"},
    {'I', "01000"}, {'J', "01001"}, {'K', "01010"},  {'L', "01011"},
    {'M', "01100"}, {'N', "01101"}, {'O', "01110"},  {'P', "01111"},
    {'Q', "10000"}, {'R', "10001"}, {'S', "10010"},  {'T', "10011"},
    {'U', "10100"}, {'V', "10101"}, {'W', "10110"},  {'X', "10111"},
    {'Y', "11000"}, {'Z', "11001"}, {' ', "11010"},  {'.', "11011"},
    {',', "11100"}, {'-', "11101"}, {'\'', "11110"}, {'?', "11111"},
};
map<string, char> map2 = {
    {"101", ' '},      {"000000", '\''},  {"000011", ','},   {"10010001", '-'},
    {"010001", '.'},   {"000001", '?'},   {"100101", 'A'},   {"10011010", 'B'},
    {"0101", 'C'},     {"0001", 'D'},     {"110", 'E'},      {"01001", 'F'},
    {"10011011", 'G'}, {"010000", 'H'},   {"0111", 'I'},     {"10011000", 'J'},
    {"0110", 'K'},     {"00100", 'L'},    {"10011001", 'M'}, {"10011110", 'N'},
    {"00101", 'O'},    {"111", 'P'},      {"10011111", 'Q'}, {"1000", 'R'},
    {"00110", 'S'},    {"00111", 'T'},    {"10011100", 'U'}, {"10011101", 'V'},
    {"000010", 'W'},   {"10010010", 'X'}, {"10010011", 'Y'}, {"10010000", 'Z'},
};

int main() {
  string str;
  while (getline(cin, str)) {
    string str2 = "";
    for (auto &v : str)
      str2 += map1[v];

    string str3 = "";
    while (not str2.empty()) {
      bool flag = true;

      for (int i = 1; i <= static_cast<int>(str2.length()); ++i) {
        auto itr = map2.find(str2.substr(0, i));
        if (itr == map2.end())
          continue;
        int len = itr->first.length();
        str2 = str2.substr(len, str2.length() - len);
        str3 += itr->second;
        flag = false;
        break;
      }
      if (flag)
        break;
    }
    cout << str3 << endl;
  }
}
