#include <iostream>
#include<vector>
#include<algorithm>
#include<string>
using namespace std;
string tenTobin(int ten) { //十进制转化为二进制,逆袭
string s;
int i, j;
if (ten == 0)return "0000";
while (ten > 1) {
j = ten % 2;
ten = ten / 2;
if (j) {
s += '1';
} else {
s += '0';
}
}
s += '1';
int acc = 4 - s.size();
while (acc) {
s += '0';
acc--;
}
return s;
}
char binTohex(string s) { //二进制转化为16进制
int p = 0;
char c;
for (int i = 0; i < s.size(); i++) {
p = s[i] - '0' + p * 2;
}
if (p > 9) {
c = p - 10 + 'A';
} else c = p + '0';
return c;
}
int main() {
string s, t, u;
vector<char>even, odd;
cin >> s >> t;
u = s + t;
int us = u.size();
for (int i = 0; i < us; i++) { //先将奇偶分开
if (i % 2)even.push_back(u[i]);
else if (!(i % 2))odd.push_back(u[i]);
}
sort(odd.begin(), odd.end()); //再排序
sort(even.begin(), even.end());
int p = 0, q = 0;
for (int i = 0; i < us; i++) { //再合并
if (i % 2)u[i] = even[p++];
else if (!(i % 2))u[i] = odd[q++];
}
for (int i = 0; i < us; i++) {
if ((u[i] >= '0' && u[i] <= '9') || (u[i] >= 'a' && u[i] <= 'f') || //如果是16进制字符
(u[i] >= 'A' && u[i] <= 'F')) {
string s(1, u[i]);
int ten = stoi(s, nullptr, 16); //将16进制转换为10进制
u[i] = binTohex(tenTobin(ten)); //转化为16进制
cout << u[i];
} else cout << u[i]; //不是16进制字符,直接输出
}
}
// 64 位输出请用 printf("%lld")