#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
#include <algorithm>
#include <bitset>
using namespace std;
struct word{
string s;
int clas;
};
bool operator<(const word &a, const word &b){
return a.clas<b.clas;
}
bool operator==(const word &a, const word &b){
return a.clas==b.clas;
}
typedef vector <word> vw;
typedef vector <char> vc;
word dic[1010];
int n;
bool found;
vc cryptab(26);
bool apps (vc &tab2, word &liner, word &dicter){
int nn=liner.s.size();
for (int i=0; i<nn; ++i){
if (tab2[liner.s[i]-'a']==0){
tab2[liner.s[i]-'a']=dicter.s[i];
}
else if(tab2[liner.s[i]-'a']!=dicter.s[i]){
return false;
}
}
return true;
}
void decryp (vw &line, int ci, int lsize, vc table ){
if (found) return;
vc tab2(26);
int i= lower_bound(dic, dic+n, line[ci]) - dic;
while (line[ci]==dic[i]){
tab2=table;
if (apps(tab2, line[ci], dic[i])){
if (ci==lsize-1){
cryptab=tab2;
found=true;
return;
}
else{
decryp(line, ci+1, lsize, tab2);
}
}
++i;
}
}
int main(){
bitset <'z'+5> rep;
int ssize;
cin>>n;
for (int i=0; i<n; ++i){
cin>>dic[i].s;
dic[i].clas=dic[i].s.size();
rep.reset();
ssize=dic[i].clas;
dic[i].clas*=100;
for (int j=0; j<ssize; ++j){
if (rep[dic[i].s[j]]){
++dic[i].clas;
}
else{
rep.set(dic[i].s[j]);
}
}
}
sort(dic, dic+n);
word temp;
while (cin>>temp.s){
temp.clas=temp.s.size();
rep.reset();
ssize=temp.clas;
temp.clas*=100;
for (int i=0; i<ssize; ++i){
if (rep[temp.s[i]]){
++temp.clas;
}
else{
rep[temp.s[i]]=1;
}
}
vw line;
line.push_back(temp);
while (true){
while (cin.peek()==' ') getchar();
if (cin.peek()=='\n'||cin.peek()==EOF) break;
cin>>temp.s;
temp.clas=temp.s.size();
rep.reset();
ssize=temp.clas;
temp.clas*=100;
for (int i=0; i<ssize; ++i){
if (rep[temp.s[i]]){
++temp.clas;
}
else{
rep[temp.s[i]]=1;
}
}
line.push_back(temp);
}
int lsize=line.size();
vc table(26);
fill(table.begin(), table.end(), 0);
found=false;
decryp (line, 0, lsize, table );
if (found){
for (int i=0; i<lsize; ++i){
int ss=line[i].s.size();
for (int j=0; j<ss; ++j){
printf("%c", cryptab[line[i].s[j]-'a']);
}
if (i<lsize-1) printf(" ");
}
printf("\n");
}
else {
for (int i=0; i<lsize; ++i){
int ss=line[i].s.size();
for (int j=0; j<ss; ++j){
printf("*");
}
if (i<lsize-1) printf(" ");
}
printf("\n");
}
}
return 0;
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxzdGRpby5oPgogICAgI2luY2x1ZGUgPHZlY3Rvcj4KICAgICNpbmNsdWRlIDxzdHJpbmc+CiAgICAjaW5jbHVkZSA8YWxnb3JpdGhtPgogICAgI2luY2x1ZGUgPGJpdHNldD4KICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICAgc3RydWN0IHdvcmR7CiAgICAgICBzdHJpbmcgczsKICAgICAgIGludCBjbGFzOwogICAgfTsKICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHdvcmQgJmEsIGNvbnN0IHdvcmQgJmIpewogICAgICAgcmV0dXJuIGEuY2xhczxiLmNsYXM7CiAgICB9CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qgd29yZCAmYSwgY29uc3Qgd29yZCAmYil7CiAgICAgICByZXR1cm4gYS5jbGFzPT1iLmNsYXM7CiAgICB9CgogICAgdHlwZWRlZiB2ZWN0b3IgPHdvcmQ+IHZ3OwogICAgdHlwZWRlZiB2ZWN0b3IgPGNoYXI+IHZjOwoKICAgIHdvcmQgZGljWzEwMTBdOwogICAgaW50IG47CiAgICBib29sIGZvdW5kOwogICAgdmMgY3J5cHRhYigyNik7CgogICAgYm9vbCBhcHBzICh2YyAmdGFiMiwgd29yZCAmbGluZXIsIHdvcmQgJmRpY3Rlcil7CiAgICAgICBpbnQgbm49bGluZXIucy5zaXplKCk7CiAgICAgICBmb3IgKGludCBpPTA7IGk8bm47ICsraSl7CiAgICAgICAgICBpZiAodGFiMltsaW5lci5zW2ldLSdhJ109PTApewogICAgICAgICAgICAgdGFiMltsaW5lci5zW2ldLSdhJ109ZGljdGVyLnNbaV07CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmKHRhYjJbbGluZXIuc1tpXS0nYSddIT1kaWN0ZXIuc1tpXSl7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICB9CiAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICB2b2lkIGRlY3J5cCAodncgJmxpbmUsIGludCBjaSwgaW50IGxzaXplLCB2YyB0YWJsZSApewogICAgICAgaWYgKGZvdW5kKSByZXR1cm47CiAgICAgICB2YyB0YWIyKDI2KTsKICAgICAgIAogICAgICAgaW50IGk9IGxvd2VyX2JvdW5kKGRpYywgZGljK24sIGxpbmVbY2ldKSAtIGRpYzsKICAgICAgIHdoaWxlIChsaW5lW2NpXT09ZGljW2ldKXsKICAgICAgICAgIHRhYjI9dGFibGU7CiAgICAgICAgICBpZiAoYXBwcyh0YWIyLCBsaW5lW2NpXSwgZGljW2ldKSl7CiAgICAgICAgICAgICBpZiAoY2k9PWxzaXplLTEpewogICAgICAgICAgICAgICAgY3J5cHRhYj10YWIyOwogICAgICAgICAgICAgICAgZm91bmQ9dHJ1ZTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICBkZWNyeXAobGluZSwgY2krMSwgbHNpemUsIHRhYjIpOwogICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICArK2k7CiAgICAgICB9CiAgICB9CgogICAgaW50IG1haW4oKXsKICAgICAgIGJpdHNldCA8J3onKzU+IHJlcDsKICAgICAgIGludCBzc2l6ZTsKICAgICAgIGNpbj4+bjsKICAgICAgIGZvciAoaW50IGk9MDsgaTxuOyArK2kpewogICAgICAgICAgY2luPj5kaWNbaV0uczsKICAgICAgICAgIGRpY1tpXS5jbGFzPWRpY1tpXS5zLnNpemUoKTsKICAgICAgICAgIHJlcC5yZXNldCgpOwogICAgICAgICAgc3NpemU9ZGljW2ldLmNsYXM7CiAgICAgICAgICBkaWNbaV0uY2xhcyo9MTAwOwogICAgICAgICAgZm9yIChpbnQgaj0wOyBqPHNzaXplOyArK2opewogICAgICAgICAgICAgaWYgKHJlcFtkaWNbaV0uc1tqXV0pewogICAgICAgICAgICAgICAgKytkaWNbaV0uY2xhczsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICByZXAuc2V0KGRpY1tpXS5zW2pdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgIH0KICAgICAgICAgIAogICAgICAgc29ydChkaWMsIGRpYytuKTsKICAgICAgIAogICAgICAgd29yZCB0ZW1wOwogICAgICAgd2hpbGUgKGNpbj4+dGVtcC5zKXsKICAgICAgICAgIHRlbXAuY2xhcz10ZW1wLnMuc2l6ZSgpOwogICAgICAgICAgcmVwLnJlc2V0KCk7CiAgICAgICAgICBzc2l6ZT10ZW1wLmNsYXM7CiAgICAgICAgICB0ZW1wLmNsYXMqPTEwMDsKICAgICAgICAgIGZvciAoaW50IGk9MDsgaTxzc2l6ZTsgKytpKXsKICAgICAgICAgICAgIGlmIChyZXBbdGVtcC5zW2ldXSl7CiAgICAgICAgICAgICAgICArK3RlbXAuY2xhczsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICByZXBbdGVtcC5zW2ldXT0xOwogICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgIHZ3IGxpbmU7CiAgICAgICAgICBsaW5lLnB1c2hfYmFjayh0ZW1wKTsKICAgICAgICAgIHdoaWxlICh0cnVlKXsKICAgICAgICAgICAgIHdoaWxlIChjaW4ucGVlaygpPT0nICcpIGdldGNoYXIoKTsKICAgICAgICAgICAgIGlmIChjaW4ucGVlaygpPT0nXG4nfHxjaW4ucGVlaygpPT1FT0YpIGJyZWFrOwogICAgICAgICAgICAgY2luPj50ZW1wLnM7CiAgICAgICAgICAgICB0ZW1wLmNsYXM9dGVtcC5zLnNpemUoKTsKICAgICAgICAgICAgIHJlcC5yZXNldCgpOwogICAgICAgICAgICAgc3NpemU9dGVtcC5jbGFzOwogICAgICAgICAgICAgdGVtcC5jbGFzKj0xMDA7CiAgICAgICAgICAgICBmb3IgKGludCBpPTA7IGk8c3NpemU7ICsraSl7CiAgICAgICAgICAgICAgICBpZiAocmVwW3RlbXAuc1tpXV0pewogICAgICAgICAgICAgICAgICAgKyt0ZW1wLmNsYXM7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgICAgcmVwW3RlbXAuc1tpXV09MTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGxpbmUucHVzaF9iYWNrKHRlbXApOwogICAgICAgICAgfQogICAgICAgICAgCiAgICAgICAgICBpbnQgbHNpemU9bGluZS5zaXplKCk7CiAgICAgICAgICB2YyB0YWJsZSgyNik7CiAgICAgICAgICBmaWxsKHRhYmxlLmJlZ2luKCksIHRhYmxlLmVuZCgpLCAwKTsKICAgICAgICAgIGZvdW5kPWZhbHNlOwogICAgICAgICAgZGVjcnlwIChsaW5lLCAwLCBsc2l6ZSwgIHRhYmxlICk7CiAgICAgICAgICBpZiAoZm91bmQpewogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGxzaXplOyArK2kpewogICAgICAgICAgICAgICAgaW50IHNzPWxpbmVbaV0ucy5zaXplKCk7CiAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8c3M7ICsrail7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIiVjIiwgY3J5cHRhYltsaW5lW2ldLnNbal0tJ2EnXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoaTxsc2l6ZS0xKSBwcmludGYoIiAiKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZm9yIChpbnQgaT0wOyBpPGxzaXplOyArK2kpewogICAgICAgICAgICAgICAgaW50IHNzPWxpbmVbaV0ucy5zaXplKCk7CiAgICAgICAgICAgICAgICBmb3IgKGludCBqPTA7IGo8c3M7ICsrail7CiAgICAgICAgICAgICAgICAgICBwcmludGYoIioiKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpPGxzaXplLTEpIHByaW50ZigiICIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgfQogICAgICAgfQogICAgICAgcmV0dXJuIDA7CiAgICB9
NgphbmQKZGljawpqYW5lCnB1ZmYKc3BvdAp5ZXJ0bGUKYmp2ZyB4c2IgaHhzbiB4c2IgcXltbSB4c2IgcnFhdCB4c2IgcG5ldGZuCnh4eHggeXl5IHp6enogd3d3IHl5eXkgYWFhIGJiYmIgY2NjIGRkZGRkZA==
6
and
dick
jane
puff
spot
yertle
bjvg xsb hxsn xsb qymm xsb rqat xsb pnetfn
xxxx yyy zzzz www yyyy aaa bbbb ccc dddddd