fs.cpp
#include <cstdio>
#include <vector>
#include <iostream>
#include <string>
#include <algorithm>
#include <cstring>
using namespace std;
string conv[][2] =
{
{ "A", "\1\2"},
{ "B", "\2\1\1\1"},
{ "C", "\2\1\2\1"},
{ "D", "\2\1\1"},
{ "E", "\1"},
{ "F", "\1\1\2\1"},
{ "G", "\2\2\1"},
{ "H", "\1\1\1\1"},
{ "I", "\1\1"},
{ "J", "\1\2\2\2"},
{ "K", "\2\1\2"},
{ "L", "\1\2\1\1"},
{ "M", "\2\2"},
{ "N", "\2\1"},
{ "O", "\2\2\2"},
{ "P", "\1\2\2\1"},
{ "Q", "\2\2\1\2"},
{ "R", "\1\2\1"},
{ "S", "\1\1\1"},
{ "T", "\2"},
{ "U", "\1\1\2"},
{ "V", "\1\1\1\2"},
{ "W", "\1\2\2"},
{ "X", "\2\1\1\2"},
{ "Y", "\2\1\2\2"},
{ "Z", "\2\2\1\1"},
{ "_", "\1\1\2\2"},
{ ",", "\1\2\1\2"},
{ ".", "\2\2\2\1"},
{ "?", "\2\2\2\2"},
};
string help(string s)
{
string res;
for (int i = 0; i < s.size(); ++i)
res += s[i] == '\1' ? '.' : '-';
return res;
}
bool IsEqual(string const& a, string const& b)
{
return a.size() == b.size() && a == b;
}
int main()
{
char arr[1025];
while (scanf("%s\n", arr) > 0)
{
string s(arr);
string mor;
mor.clear();
vector<int> v;
v.clear();
v.resize(s.size(), -1);
//cout << s << endl;
for (int i = 0; i < s.size();)
{
for (int j = 0; j < 30; ++j)
{
// cout << s.substr(i, conv[j][1].size()) << " != " << conv[j][1] << endl;
if (IsEqual(s.substr(i, conv[j][0].size()), conv[j][0]))
{
//cout << s.substr(i, conv[j][0].size()) << " == " << conv[j][0]<< " <- " << help(conv[j][1]) <<endl;
v.push_back(conv[j][1].size());
mor += conv[j][1];
i += conv[j][0].size();
break;
}
}
// cout << "1 " << i << endl;
}
// cout << help(mor) << endl;
std::reverse(v.begin(), v.end());
string res;
res.clear();
int cnt = 0;
for (int i = 0; i < mor.size();)
{
for (int j = 0; j < 30; ++j)
{
// cout << help(mor.substr(i, v[cnt])) << " != " << help(conv[j][1]) << endl;
if (IsEqual(mor.substr(i, v[cnt]), conv[j][1]))
{
//cout << help(mor.substr(i, v[cnt])) << " != " << help(conv[j][1]) << " ->" << conv[j][0] <<endl;
i += v[cnt];
res += conv[j][0];
++cnt;
break;
}
}
//cout << "1 " << i << endl;
}
// cout << cnt << " " << v.size();
printf("%s\n", res.c_str());
}
return 0;
}