#include <iostream>
using namespace std;
int main()
{
char origanMsg[120];
char codeMsg[120];
char waitInterpretMsg[120];
char code1[30];
char code2[30];
int i = 0;
for (int x = 0; x <= 25; x++)
{
code1[x] = 'f';
code2[x] = 'f';
}
while (true)
{
cin.get(origanMsg[i]);
if (origanMsg[i] == '\n')
break;
i++;
}
for (int n = 0; n <= i; n++)
{
cin.get(codeMsg[n]);
}
int n = 0;
while (true)
{
cin.get(waitInterpretMsg[n]);
if (waitInterpretMsg[n] == '\n')
break;
n++;
}
for (int n = 0; n < i; n++)
{
if (code1[origanMsg[n] - 'A'] != 'f' && code1[origanMsg[n] - 'A'] != codeMsg[n] || code2[codeMsg[n] - 'A'] != origanMsg[n]&& code2[codeMsg[n] - 'A']!='f')
{
cout << "Failed";
return 0;
}
code1[origanMsg[n] - 'A'] = codeMsg[n];
code2[codeMsg[n] - 'A'] = origanMsg[n];
}
for (int x = 0; x <= 25; x++)
{
if (code1[x] == 'f')
{
cout << "Failed";
return 0;
}
}
i = 0;
while (true)
{
if (waitInterpretMsg[i] == '\n')
{
break;
}
cout << code1[waitInterpretMsg[i] - 'A'];
i++;
}
}
//输入
XOCKPGHZQWTRLEMBIYJNFVUSADIPLOEQSNIGYQLBFDYNKKOCCIFEWYAAVXKBPHRXDWLKLWQFLIYFCMZGJFANGLUDCTWDUAJNFEUA
WDGASYNVPHLQRCMXJFTOIKEZUBJSRDCPZOJYFPRXIBFOAADGGJICHFUUKWAXSNQWBHRARHPIRJFIGMVYTIUOYREBGLHBEUTOICEU
KSDPBTWJMVQKSNABRIIOAVUZXQXONXNYGBOKMQKDGEKSMBQGYXLCLEYBDMMOSVXCNYDVEGWBLCHYYSFDVZYVBLZQUWDJTOJFSLTC
//我的输出
AZBSXLHTMKPAZOUXQJJDUKEVWPWDOWOFYXDAMPABYCAZMXPYFWRGRCFXBMMDZKWGOFBKCYHXRGNFFZIBKVFKXRVPEHBTLDTIZRLG
//正确答案
AZBSXLHTMKPAZOUXQJJDUKEVWPWDOWOFYXDAMPABYCAZMXPYFWRGRCFXBMMDZKWGOFBKCYHXRGNFFZIBKVFKXRVPEHBTLDTIZRLG
//但是在洛谷上面运行输出是一个Failed