fs.cpp
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<math.h>
#include<string.h>
#include<vector>
#include<map>
#include<string>
#include<algorithm>
using namespace std;
#define FOR(i,a,b) for(int i=a; i<=b; i++)
#define FOREACH(obj, it) for(__typeof(obj.begin()) it = (obj).begin(); it != (obj).end(); (it)++)
#define PII pair<int, int>
#define MP make_pair
#define PB push_back
#define SIZE(s) ((int)(s).size())
#define ll long long
#define fi first
#define se second
map<char, string> M1;
map<string, char> M2;
void init()
{
M1['A'] = ".-";
M1['B'] = "-...";
M1['C'] = "-.-.";
M1['D'] = "-..";
M1['E'] = ".";
M1['F'] = "..-.";
M1['G'] = "--.";
M1['H'] = "....";
M1['I'] = "..";
M1['J'] = ".---";
M1['K'] = "-.-";
M1['L'] = ".-..";
M1['M'] = "--";
M1['N'] = "-.";
M1['O'] = "---";
M1['P'] = ".--.";
M1['Q'] = "--.-";
M1['R'] = ".-.";
M1['S'] = "...";
M1['T'] = "-";
M1['U'] = "..-";
M1['V'] = "...-";
M1['W'] = ".--";
M1['X'] = "-..-";
M1['Y'] = "-.--";
M1['Z'] = "--..";
M1['_'] = "..--";
M1[','] = ".-.-";
M1['.'] = "---.";
M1['?'] = "----";
FOREACH(M1, it)
M2[ it->se ] = it->fi;
}
#define MAX 1047
char s[MAX];
int dlzky[MAX];
int main()
{
string n = "";
init();
int N;
while(gets(s))
{
n = "";
N = (int) strlen(s);
FOR(i,0,N-1)
{
n+= M1[s[i]];
dlzky[i] = SIZE( M1[s[i]] );
}
string temp;
int k = 0;
string ns = "";
for(int i=N-1;i>=0;i--)
{
temp = n.substr(k , dlzky[i]);
ns+= M2[temp];
k+= dlzky[i];
}
printf("%s\n", ns.c_str());
}
return 0;
}