#include <bits/stdc++.h>
using namespace std;
long digits[10] = {0};
string s, n1, n2, n3, order;
long k(0);
bool used_s(false);
void input();
int len(long a);
void search_n_digits();
bool comp(long p);
void end();
int main() {
  ios::sync_with_stdio(false);
  input();
  if (s == "0" && k == 2) {
    cout << 0;
    return 0;
  }
  search_n_digits();
  end();
  vector<string> ans;
  if (n1[0] != '0') ans.push_back(n1);
  if (n2[0] != '0') ans.push_back(n2);
  if (n3[0] != '0') ans.push_back(n3);
  sort(ans.begin(), ans.end());
  cout << ans[0];
}
void input() {
  char c;
  while ((c = cin.get()) != '\n') {
    digits[c - '0']++;
    k++;
  }
  cin >> s;
  for (int i(0); i < s.length(); ++i) digits[s[i] - '0']--;
}
int len(long a) {
  int ans(0);
  while (a) {
    a /= 10;
    ++ans;
  }
  return (ans) ? ans : 1;
}
void search_n_digits() {
  int pp = 7;
  while (len(k - pp) != pp) --pp;
  long llen = k - pp;
  while (llen) {
    digits[llen % 10]--;
    llen /= 10;
  }
}
void end() {
  int pp(1);
  while (!digits[pp]) ++pp;
  n1 += pp + '0';
  n2 += pp + '0';
  n3 += s;
  bool flag1, flag2;
  flag1 = flag2 = false;
  int p(0);
  for (p; p < 10; ++p) {
    if (!flag1 && p > s[0] - '0') {
      n1 += s;
      flag1 = true;
    }
    if (!flag2 && p >= s[0] - '0') {
      n2 += s;
      flag2 = true;
    }
    int q(0);
    if (p == pp) --q;
    for (int a(0); a < digits[p] + q; ++a) {
      n1 += p + '0';
      n2 += p + '0';
      n3 += p + '0';
    }
    if (p == pp) n3 += p + '0';
  }
  if (!flag1) n1 += s;
  if (!flag2) n2 += s;
}
