import java.util.Scanner;
import java.util.Set;
import java.util.HashSet;
import java.util.ArrayList;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 2. 读取第一个输入:种子字符串s(用于生成新字母表)
        String s = in.nextLine();
        // 将种子字符串转换为字符数组,方便后续遍历处理
        char[] chars = s.toCharArray();

        // 3. 调用工具方法,生成26位完整的新字母表
        StringBuilder newAlphabet = getStringBuilder(chars);
        // 将新字母表转换为字符串(便于后续按索引取值)
        String newStr = newAlphabet.toString();

        // 4. 读取第二个输入:需要加密的明文t
        String t = in.nextLine();
        // 创建StringBuilder存储加密后的密文(高效拼接字符串)
        StringBuilder res = new StringBuilder();

        // 5. 遍历明文字符,逐个替换为新字母表的对应字符
        for (char c : t.toCharArray()) {
            // 计算当前字符在标准字母表(a-z)中的索引(a=0, b=1...z=25)
            int index = c - 'a';
            // 按索引取新字母表的对应字符,追加到密文结果中
            res.append(newStr.charAt(index));
        }

        // 6. 输出最终加密后的密文
        System.out.println(res.toString());
        // 关闭Scanner,释放资源
        in.close();
    }

    /**
     * 核心工具方法:根据种子字符数组生成26位新字母表
     * @param chars 种子字符串转换后的字符数组
     * @return 26位新字母表的StringBuilder对象
     */
    private static StringBuilder getStringBuilder(char[] chars) {
        // 1. 去重逻辑:Set用于快速判断字符是否已存在(保证唯一性)
        Set<Character> set = new HashSet<>();
        // 2. 保序逻辑:List用于按首次出现顺序存储去重后的字符
        ArrayList<Character> list = new ArrayList<>();

        // 遍历种子字符数组,完成去重并保留首次出现顺序
        for (char c : chars) {
            if (set.contains(c)) {
                // 字符已存在,跳过(去重)
                continue;
            } else {
                // 字符首次出现:标记到Set,同时加入List保序
                set.add(c);
                list.add(c);
            }
        }

        // 3. 将去重保序后的List转换为基础字符串(新字母表的前半部分)
        StringBuilder sb = new StringBuilder();
        for (Character c : list) {
            sb.append(c);
        }
        // 基础串:去重后的种子字符串(长度<26)
        String baseStr = sb.toString();

        // 4. 补全基础串为26位新字母表:先拼接基础串,再补充缺失字符
        StringBuilder newAlphabet = new StringBuilder(baseStr);
        // 遍历a-z所有字符,补充基础串中没有的字符
        for (char c = 'a'; c <= 'z'; c++) {
            String charStr = String.valueOf(c);
            // 字符未出现在基础串中,追加到新字母表末尾
            if (!baseStr.contains(charStr)) {
                newAlphabet.append(c);
            }
        }

        // 返回完整的26位新字母表
        return newAlphabet;
    }
}