#include <bits/stdc++.h>   using namespace std;   template <typename T>   struct number_iterator : iterator<random_access_iterator_tag, T> {     T v;     number_iterator(T _v) : v(_v) {}     operator T &() { return v; }     T operator*() const { return v; }   };   template <typename T>   struct number_range {     T b, e;     number_range(T b, T e) : b(b), e(e) {}     number_iterator<T> begin() { return b; }     number_iterator<T> end() { return e; }   };   template <typename T>   number_range<T> range(T e) {     return number_range<T>(0, e);   }   template <typename T>   number_range<T> range(T b, T e) {     return number_range<T>(b, e);   }   template <typename... Args>   void logger(string vars, Args &&...values) {     cout <<  [  << vars <<  ]           <<   =  ;     string delim =   ;     cout <<  [  << (..., (cout << delim << values, delim =  ,  )) <<  ]           <<   n ;   }   template <typename T>   void debug(vector<T> v) {     cout <<  { ;     for (auto i : range(v.size()))       cout << v[i] << (i + 1 == v.size() ?    :  ,  );     cout <<  }           <<   n ;   }   template <typename T, typename S>   void debug(pair<T, S> &p) {     cout <<  ( ;     cout << p.first <<  ,   << p.second;     cout <<  ) ;   }   template <typename T, typename S>   void debug(vector<pair<T, S>> vp) {     cout <<  { ;     for (auto i : range(vp.size())) {       debug(vp[i]);       cout << (i + 1 == vp.size() ?    :  ,  );     }     cout <<  }           <<   n ;   }   template <typename T>   void debug(vector<vector<T>> vv) {     cout <<  [ ;     for (auto i : range(vv.size())) debug(vv[i]);     cout <<  ]           <<   n ;   }   template <typename T>   void debug(T a[], long long n) {     cout <<  { ;     for (auto i : range(n)) cout << a[i] << (i + 1 == n ?    :  ,  );     cout <<  }           <<   n ;   }   template <typename T>   void debug(set<T> s) {     cout <<  { ;     for (auto i = s.begin(); i != s.end();)       cout << *i << (++i == s.end() ?    :  ,  );     cout <<  }           <<   n ;   }   template <typename T>   void debug(multiset<T> s) {     cout <<  { ;     for (auto i = s.begin(); i != s.end();)       cout << *i << (++i == s.end() ?    :  ,  );     cout <<  }           <<   n ;   }   template <typename T1, typename T2>   void debug(map<T1, T2> make_pair) {     cout <<  { ;     for (auto i = make_pair.begin(); i != make_pair.end();)       cout <<  (  << i->first <<   :   << i->second <<  )             << (++i == make_pair.end() ?    :  , );     cout <<  }           <<   n ;   }   long long modExpo(long long a, long long b, long long m = 1000000007) {     long long res = 1;     while (b > 0) {       if (b & 1) res = (res * a) % m;       a = (a * a) % m;       b = b >> 1;     }     return res;   }   void extendEuclids(long long a, long long b, long long *v) {     if (b == 0) {       v[0] = 1, v[1] = 0, v[2] = a;       return;     }     extendEuclids(b, a % b, v);     long long x = v[1];     v[1] = v[0] - v[1] * (a / b);     v[0] = x;     return;   }   long long modInv(long long a, long long b) {     long long arr[3];     extendEuclids(a, b, arr);     return arr[0];   }   long long modInv_lil(long long a, long long b) { return modExpo(a, b - 2, b); }   long long add(long long a, long long b, long long c = 1000000007) {     long long res = a + b;     return (res >= c ? res - c : res);   }   long long mod_mul(long long a, long long b, long long c = 1000000007) {     long long res = a * b;     return (res >= c ? res % c : res);   }   long long mod_sub(long long a, long long b, long long m = 1000000007) {     a = a % m;     b = b % m;     return (((a - b) % m) + m) % m;   }   long long mod_div(long long a, long long b, long long m = 1000000007) {     a = a % m;     b = b % m;     return (mod_mul(a, modInv_lil(b, m), m) + m) % m;   }   class Solution {    public:     void Solve() {       string t, s;       cin >> t >> s;       deque<char> a, b;       sort((t).begin(), (t).end());       sort((s).begin(), (s).end(), greater<long long>());       long long n = t.length(), i = 0, j = 0, cnt1, cnt2;       string ansr, ansl;       cnt1 = ceil((double)n / (double)2);       cnt2 = n / 2;       for (auto i : range(cnt1)) a.push_back(t[i]);       for (auto i : range(cnt2)) b.push_back(s[i]);       while (i < n) {         if (i & 1) {           if (!a.empty() && a[0] >= b[0]) {             ansr += b.back();             b.pop_back();           } else {             ansl += b[0];             b.pop_front();           }         } else {           if (!b.empty() && a[0] >= b[0]) {             ansr += a.back();             a.pop_back();           } else {             ansl += a[0];             a.pop_front();           }         }         i += 1;       }       reverse((ansr).begin(), (ansr).end());       cout << ansl + ansr;     }   };   signed main() {     ios_base::sync_with_stdio(0);     cin.tie(0);     cout.tie(0);     Solution ob;     { ob.Solve(); }     return 0;   }   template <typename T>   inline T Max(const T a, const T b) {     return a < b ? b : a;   }   template <typename T, typename... Args>   T Max(const T a, const Args... args) {     return Max(a, Max(args...));   }   template <typename T>   inline T Min(const T a, const T b) {     return a < b ? a : b;   }   template <typename T, typename... Args>   T Min(const T a, const Args... args) {     return Min(a, Min(args...));   }   template <typename T>   inline T LCM(const T a, const T b) {     return ((a) * (b)) / __gcd((a), (b));   }   template <typename T, typename... Args>   T LCM(const T a, const Args... args) {     return LCM(a, LCM(args...));   }