import java.util.*;
public class Main {
public static void main(String[] args) {
// 标准输入
Scanner input = new Scanner(System.in);
// 获取输入的两个字符串
String str1 = input.next();
String str2 = input.next();
// 合并两个字符串
String str3 = str1.concat(str2);
// 将字符串按下标奇偶切分后再拼接
StringBuffer oddStr = new StringBuffer();
StringBuffer evenStr = new StringBuffer();
for (int i = 0; i < str3.length(); i++) {
char c = str3.charAt(i);
if (i % 2 == 1) {
// 下标为奇数
oddStr.append(c);
} else {
// 下标为偶数
evenStr.append(c);
}
}
// 对奇偶字符串转数组后进行排序
char[] oddArr = oddStr.toString().toCharArray();
char[] evenArr = evenStr.toString().toCharArray();
Arrays.sort(oddArr);
Arrays.sort(evenArr);
// 构建排序后的拼接字符串
StringBuffer sortedStr = new StringBuffer();
int oddIndex = 0;
int evenIndex = 0;
while (oddIndex < oddArr.length && evenIndex < evenArr.length) {
sortedStr.append(evenArr[evenIndex++]).append(oddArr[oddIndex++]);
}
// 偶数组可能残留数据,收一下尾
if (evenIndex == evenArr.length-1) sortedStr.append(evenArr[evenIndex]);
// 排序完成,测试
// System.out.println(sortedStr.toString());
// 遍历转换相应字符
StringBuffer res = new StringBuffer();
for (char c : sortedStr.toString().toCharArray()) {
if (!shouldChange(c)) {
// 不需要转换,直接拼接
res.append(c);
} else {
// 需要转换,转转换后再拼接
res.append(change(c));
}
}
// 转换拼接完成,输出结果
System.out.println(res.toString());
}
// 判断字符是否需要转换
private static boolean shouldChange(char c) {
if ('0' <= c && c <= '9') return true;
if ('a' <= c && c <= 'f') return true;
if ('A' <= c && c <= 'F') return true;
return false;
}
// 转换字符的函数
private static char change(char c) {
// 将字符按十六进制解析成十进制数字
int num = Integer.parseInt(String.valueOf(c),16);
// 十进制数字转二进制字符串
String binary = Integer.toBinaryString(num);
// 将二进制字符串补足至4位
while (binary.length() < 4) {
binary = "0" + binary;
}
// 翻转二进制字符串
StringBuffer temp = new StringBuffer(binary);
temp.reverse();
binary = temp.toString();
// 将二进制字符串解析成十进制数字
int newNum = Integer.parseInt(binary,2);
// 十进制数字转十六进制字符
char newC = Integer.toHexString(newNum).charAt(0);
// 转大写再返回结果
return Character.toUpperCase(newC);
}
}