#include <cctype>
#include <iostream>
#include <string>
#include <algorithm>
#include <unordered_map>
#include <map>
using namespace std;
// 对字符串mingwen按照key进行加密,返回加密后的字符串
string Decrypt(string& key, const std::string& mingwen)
{
string newKey = "";
string miwen = "";
// 将密钥key全部先转成小写字母
std::transform(key.begin(), key.end(), key.begin(), ::tolower);
unordered_map<char, int> chMap;
char chStart = 'a';
map<char, char> matchMap;
for (auto ch : key) {
if (isalpha(ch) && chMap.count(ch) == 0) {
chMap[ch]++;
newKey += ch;
matchMap[chStart++] = ch;
}
}
// 遍历字母表,如果不在key中则加入newKey之后,得到新字母表
for (char ch1 = 'a'; ch1 <= 'z'; ch1++) {
if (chMap.count(ch1) == 0) {
newKey += ch1;
matchMap[chStart++] = ch1;
}
}
for (auto ch2 : mingwen) {
bool isUpper = (ch2 >= 'A' && ch2 <= 'Z');
char ch = ch2;
if (isUpper) {
ch = ::tolower(ch2);
}
auto jt = matchMap.find(ch);
if (jt != matchMap.end()) {
if (isUpper) {
miwen += ::toupper(jt->second);
} else {
miwen += jt->second;
}
} else {
miwen += ch2;
}
}
return miwen;
}
int main() {
std::string key, mingwen;
// while (cin >> key >> mingwen) { // 注意 while 处理多个 case
// cout << Decrypt(key, mingwen) << std::endl;
// }
while (getline(cin, key)) {
getline(cin, mingwen);
std::cout << Decrypt(key, mingwen) << std::endl;
}
return 0;
}