#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef unsigned u;

#define INF INT_MAX
#define MOD (1000000007)
#define PI arccos(-1)

#define pll pair<long long, long long>
#define mp make_pair

#define vll vector<ll>
#define vb vector<bool>
#define vs vector<string>
#define vp vector<pll>
#define pb push_back
#define all(v) v.begin(), v.end()
#define print_vect(v) for (auto it : v) cout << it << " ";

#define pq priority_queue<ll>
#define pqg priority_queue<ll, vll, greater<ll>>
#define set set<ll>
#define mset multiset<ll>
#define queue queue<ll>

ll add(ll a, ll b) { a += b; return a >= MOD ? a - MOD : a; }
ll sub(ll a, ll b) { a -= b; return a < 0 ? a + MOD : a; }
ll mul(ll a, ll b) { return (long long)(a) * (long long)(b) % MOD; }
 
void sadd(ll &a, ll b) { a = add(a, b); }
void ssub(ll &a, ll b) { a = sub(a, b); }
void smul(ll &a, ll b) { a = mul(a, b); }

ll nzs(ll a, ll b){ 
    return (a / __gcd(a, b)) * b; 
}

const ll N = 1e9 + 5;

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    string br1, br2, ans;
    cin >> br1 >> br2;
    ll n = br1.size() - 1;
    ll m = br2.size() - 1;
    if(n < m){
        swap(n, m);
        swap(br1, br2);
    }
    while(m >= 0){
        if(br1[n] < br2[m]){
            ans += br2[m];
        }
        else if(br1[n] > br2[m]){
            ans += br1[n];
        }
        else{
            ans += br1[n];
            ans += br2[m];
        }
        n--;
        m--;
    }
    while(n >= 0){
        ans += br1[n];
        n--;
    }
    reverse(ans.begin(), ans.end());
    cout << ans;
    return 0;
}