fs.cpp
#include <vector>
#include <list>
#include <map>
#include <set>
#include <algorithm>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <string>
#define vi vector <int>
#define vl vector <long long>
#define vpii vector <pair <int,int> >
#define mp(x,y) make_pair(x,y)
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()
#define FOR(i,n) for(ll i=0;i<int(n);i++)
#define READ(v,n) {FOR(i,n){ll x;cin>>x;v.pb(x);} }
#define gmin(a,b) {if (b<a) a=b;}
#define gmax(a,b) {if (b>a) a=b;}
#define pb push_back
#define ppb pop_back
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
int main(){
vector <string> v(256,"");
v['A']=".-";
v['B']="-...";
v['C']="-.-.";
v['D']="-..";
v['E']=".";
v['F']="..-.";
v['G']="--.";
v['H']="....";
v['I']="..";
v['J']=".---";
v['K']="-.-";
v['L']=".-..";
v['M']="--";
v['N']="-.";
v['O']="---";
v['P']=".--.";
v['Q']="--.-";
v['R']=".-.";
v['S']="...";
v['T']="-";
v['U']="..-";
v['V']="...-";
v['W']=".--";
v['X']="-..-";
v['Y']="-.--";
v['Z']="--..";
v['_']="..--";
v[',']=".-.-";
v['.']="---.";
v['?']="----";
string s;
while(cin>>s){
string r="";
vi l;
FOR(i,s.length()){
r=r+v[s[i]];
l.pb(v[s[i]].length());
}
string res="";
for(int i=sz(l)-1;i>=0;i--) {
string x=r.substr(0,l[i]);
r=r.substr(l[i]);
FOR(i,256){
if(v[i]==x){
res=res+(char)i;
}
}
}
cout<<res<<endl;
}
return 0;
}