#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")