#include <iostream>
#include <algorithm>
using namespace std;
int main(){
// 字典法
char Input[] = {"0123456789abcdefABCDEF"};
char Output[] = {"084C2A6E195D3B7F5D3B7F"};
string s,t,u;
cin>>s>>t; // 以空格为间隔
u = s + t; // 合并为一个字符串
// u中的奇数位置和偶数位置各自按照Ascii码从大到小排序
// 空间换时间,各自抽出新的
string newS,newT,newU;
for(int i = 0; i < u.length(); ++i){
if(i % 2 == 0){
// 偶数位置
newT += u[i];
}else{
// 奇数位置
newS += u[i];
}
}
// 各自排序
std::sort(newS.begin(),newS.end());
std::sort(newT.begin(),newT.end());
// 将其合并得到新的newU
int i = 0, k = 0;
while(i < newS.length() && k < newT.length()){
// 先i后k
newU += newT[k++];
newU += newS[i++];
}
if(i < newS.length()){
newU += newS[i];
}
if(k < newT.length()){
newU += newT[k];
}
// 输出测试
// cout<<newU<<endl;
// 调整阶段
for(int i = 0; i < newU.length(); ++i){
// 如果不是十六进制字符,即不为0-9,a-f,A-F,则直接追加到结果中
if(newU[i] >= '0' && newU[i] <= '9'){
newU[i] = Output[newU[i] - '0'];
}else if(newU[i] >= 'a' && newU[i] <= 'f'){
newU[i] = Output[newU[i] - 'a' + 10];
}else if(newU[i] >= 'A' && newU[i] <= 'F'){
newU[i] = Output[newU[i] - 'A' + 16];
}
}
// 输出
cout<<newU<<endl;
}