fs.cpp
#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>
#include <vector>
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;
///////////////////////////////////////////////////////////////////////////
string morse[][2] = {
{"A", ".-"},
{"B", "-..."},
{"C", "-.-."},
{"D", "-.."},
{"E", "."},
{"F", "..-."},
{"G", "--."},
{"H", "...."},
{"I", ".."},
{"J", ".---"},
{"K", "-.-"},
{"L", ".-.."},
{"M", "--"},
{"N", "-."},
{"O", "---"},
{"P", ".--."},
{"Q", "--.-"},
{"R", ".-."},
{"S", "..."},
{"T", "-"},
{"U", "..-"},
{"V", "...-"},
{"W", ".--"},
{"X", "-..-"},
{"Y", "-.--"},
{"Z", "--.."},
{"_", "..--"},
{".", "---."},
{",", ".-.-"},
{"?", "----"}
};
int M = 30;
const int MAX = 1024*6;
char in[MAX], in2[MAX];
int lens[MAX];
int main()
{
while (gets(in))
{
int len = strlen(in), len2 = 0;
REP(i, len)
{
REP(j, M)
if (morse[j][0][0] == in[i])
{
string & s = morse[j][1];
lens[i] = s.size();
REP(k, s.size())
in2[len2++] = s[k];
break;
}
}
reverse(lens, lens+len);
len = 0;
for (int i = 0; i < len2; i += lens[len++])
{
string s(in2+i, in2+i+lens[len]);
REP(j, M)
if (morse[j][1] == s)
{
in[len] = morse[j][0][0];
break;
}
}
printf("%s\n", in);
}
return 0;
}