#include <algorithm>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
using namespace std;
#define DEBUG(x) cout << ">>> " << #x << " : " << x << endl;
#define REP(i,a) for (int i = 0; i < (a); ++i)
#define FOR(i,a,b) for (int i = (a); i <= (b); ++i)
#define FORD(i,a,b) for (int i = (a); i >= (b); --i)
inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
const int INF = 1<<29;
typedef long long ll;
bool encoded[5000];
int lengths[1100];
int encodedSize;
int decodeNext;
char output[1100];
void put(bool dash) {
encoded[encodedSize++] = dash;
}
void encode(int pos, char ch) {
int l;
switch (ch) {
case 'A': l = 2; put(0); put(1); break;
case 'B': l = 4; put(1); put(0); put(0); put(0); break;
case 'C': l = 4; put(1); put(0); put(1); put(0); break;
case 'D': l = 3; put(1); put(0); put(0); break;
case 'E': l = 1; put(0); break;
case 'F': l = 4; put(0); put(0); put(1); put(0); break;
case 'G': l = 3; put(1); put(1); put(0); break;
case 'H': l = 4; put(0); put(0); put(0); put(0); break;
case 'I': l = 2; put(0); put(0); break;
case 'J': l = 4; put(0); put(1); put(1); put(1); break;
case 'K': l = 3; put(1); put(0); put(1); break;
case 'L': l = 4; put(0); put(1); put(0); put(0); break;
case 'M': l = 2; put(1); put(1); break;
case 'N': l = 2; put(1); put(0); break;
case 'O': l = 3; put(1); put(1); put(1); break;
case 'P': l = 4; put(0); put(1); put(1); put(0); break;
case 'Q': l = 4; put(1); put(1); put(0); put(1); break;
case 'R': l = 3; put(0); put(1); put(0); break;
case 'S': l = 3; put(0); put(0); put(0); break;
case 'T': l = 1; put(1); break;
case 'U': l = 3; put(0); put(0); put(1); break;
case 'V': l = 4; put(0); put(0); put(0); put(1); break;
case 'W': l = 3; put(0); put(1); put(1); break;
case 'X': l = 4; put(1); put(0); put(0); put(1); break;
case 'Y': l = 4; put(1); put(0); put(1); put(1); break;
case 'Z': l = 4; put(1); put(1); put(0); put(0); break;
case '_': l = 4; put(0); put(0); put(1); put(1); break;
case ',': l = 4; put(0); put(1); put(0); put(1); break;
case '.': l = 4; put(1); put(1); put(1); put(0); break;
case '?': l = 4; put(1); put(1); put(1); put(1); break;
default: exit(1); break;
}
lengths[pos] = l;
}
void decode(int pos) {
int l = lengths[pos];
int val = 0;
REP(i,l) {
val *= 2;
bool dash = encoded[decodeNext++];
if (dash) ++val;
}
char letter = '\0';
if (l == 1) {
if (val) letter = 'T';
else letter = 'E';
} else if (l == 2) {
switch (val) {
case 0: letter = 'I'; break;
case 1: letter = 'A'; break;
case 2: letter = 'N'; break;
case 3: letter = 'M'; break;
}
} else if (l == 3) {
switch (val) {
case 0: letter = 'S'; break;
case 1: letter = 'U'; break;
case 2: letter = 'R'; break;
case 3: letter = 'W'; break;
case 4: letter = 'D'; break;
case 5: letter = 'K'; break;
case 6: letter = 'G'; break;
case 7: letter = 'O'; break;
}
} else {
switch (val) {
case 0: letter = 'H'; break;
case 1: letter = 'V'; break;
case 2: letter = 'F'; break;
case 3: letter = '_'; break;
case 4: letter = 'L'; break;
case 5: letter = ','; break;
case 6: letter = 'P'; break;
case 7: letter = 'J'; break;
case 8: letter = 'B'; break;
case 9: letter = 'X'; break;
case 10: letter = 'C'; break;
case 11: letter = 'Y'; break;
case 12: letter = 'Z'; break;
case 13: letter = 'Q'; break;
case 14: letter = '.'; break;
case 15: letter = '?'; break;
}
}
if (!letter) exit(2);
output[pos] = letter;
}
int main() {
while (true) {
char *input = NULL;
size_t L;
if (getline(&input, &L, stdin) < 0) break;
L = strlen(input)-1;
encodedSize = 0;
decodeNext = 0;
REP(i,L) encode(i, input[i]);
for (int i = 0; i < L-i-1; ++i) swap(lengths[i], lengths[L-i-1]);
REP(i,L) decode(i);
output[L] = '\0';
puts(output);
}
return 0;
}