#include <deque>
#include <iostream>
#include <set>
#include <string>
using namespace std;
/*
HJ20 HJ21 HJ29 HJ30 HJ36 都是与密码相关的问题
程序思路:目标是构建两个一一对应的字符串
一个是 26位字母表
一个是 输入中的字符串按照题目要求的方法得出的字符串 str2.
题目的关键也是构建 str2.
如何构建str2?
1. 遍历字符串
2. 通过set集合去除字符串中重复元素
3. 通过deque 双端队列保持字母的相对位置不变
4. 这样就将单词中包含有重复的字母,只保留第1个,将所得结果作为新字母表开头,
5. 之后再补上后面缺少的单词
*/
int main() {
string key, str;
cin >> key;
cin >> str;
string src = "abcdefghijklmnopqrstuvwxyz";
string enc;
deque<char> dq;// 保持字母相对位置不变
set<char> st; // 去重
// 遍历密钥字符串
for (auto c : key) {
if (st.count(c) == 0) {
st.insert(c);
dq.push_back(c);;
}
}
while (!dq.empty()) {
enc += dq.front();
dq.pop_front();
}
// 字母表中剩余的字母填充完整
for (char c = 'a'; c <= 'z'; c++) {
if (st.count(c) == 0) {
enc += c;;
}
}
string ans;
for (auto c : str) {
ans += enc[src.find_last_of(c)];
}
cout << ans << endl;
}
// 64 位输出请用 printf("%lld")