#include<bits/stdc++.h>
using namespace std;

#define MOD 1000000007
typedef long long ll;
typedef unsigned long long ull;
const long long INF=1e18;
typedef pair<ll,ll> pll;
#define F first
#define S second



signed main(){
  string a,b;
  cin>>a>>b;
  vector<pll> A(a.size()+2,{INF,INF}),B(b.size()+2,{INF,INF});
  ll mi0=INF;
  ll mi1=INF;
  for(ll i=a.size()-1;i>=0;i--){
    A[i+1]={mi0,mi1};
    if(a[i]=='0'){mi0=i+1;}
    else{mi1=i+1;}
  }
  
  A[0]={mi0,mi1};
  mi0=INF;
  mi1=INF;
  for(ll i=b.size()-1;i>=0;i--){
    B[i+1]={mi0,mi1};
    if(b[i]=='0'){mi0=i+1;}
    else{mi1=i+1;}
  }
  B[0]={mi0,mi1};
  vector<vector<pll>> dp(a.size()+2,vector<pll>(b.size()+2,{INF,-1}));
  for(ll i=a.size()+1;i>=0;i--){
    for(ll t=b.size()+1;t>=0;t--){
      if(A[i].F==INF && B[t].F==INF){dp[i][t]={1,0};}
      else if(A[i].S==INF && B[t].S==INF){dp[i][t]={1,1};}
      else{
	dp[i][t].F=dp[(A[i].F==INF?(ll)a.size()+(ll)1:A[i].F)][(B[t].F==INF?(ll)b.size()+(ll)1:B[t].F)].F+1;
	dp[i][t].S=0;
	if(dp[i][t].F>dp[(A[i].S==INF?(ll)a.size()+1:A[i].S)][(B[t].S==INF?(ll)b.size()+1:B[t].S)].F+1){
	  dp[i][t].F=(dp[A[i].S==INF?(ll)a.size()+1:A[i].S][B[t].S==INF?(ll)b.size()+1:B[t].S].F+1);
	  dp[i][t].S=1;
	}
      }
    }
  }
  
  ll wx=0,wy=0;
  while(wx!=a.size()+1 || wy!=b.size()+1){
    cout<<dp[wx][wy].S;
    if(dp[wx][wy].S==0){
      wx=(A[wx].F==INF?(ll)a.size()+1:A[wx].F);
      wy=(B[wy].F==INF?(ll)b.size()+1:B[wy].F);
    }
    else{
      wx=(A[wx].S==INF?(ll)a.size()+1:A[wx].S);
      wy=(B[wy].S==INF?(ll)b.size()+1:B[wy].S);
    }
  }
  cout<<endl;
  
  
  return 0;
}

