#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...));
}
