#include <bits/stdc++.h>
using namespace std;
mt19937 _g(time(0));
long long randint(long long a, long long b) {
  long long w = (_g() << 31ll) ^ _g();
  return a + w % (b - a + 1);
};
void boot_up() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.setf(ios::fixed);
  cout.precision(6);
}
const long long INF = 1e18, maxn = 2e5;
bool possible(string &s, string &t) {
  vector<long long> cnt_s(2), cnt_t(2);
  for (auto c : s) {
    cnt_s[c - '0']++;
  }
  for (auto c : t) {
    cnt_t[c - '0']++;
  }
  if (cnt_t[0] > cnt_s[0] || cnt_t[1] > cnt_s[1]) {
    return false;
  } else {
    return true;
  }
}
void z_fun(string &s, vector<long long> &z) {
  long long n = s.size();
  z.resize(n, 0);
  z[0] = n;
  long long l = 0, r = 0;
  for (long long i = 1; i < n; ++i) {
    if (i > r) {
      long long j;
      for (j = 0; j < n && s[i + j] == s[j]; ++j)
        ;
      l = i, r = i + j - 1;
      z[i] = j;
    } else if (z[i - l] + i - 1 < r) {
      z[i] = z[i - l];
    } else {
      z[i] = z[i - l];
      long long j;
      for (j = 1; r + j < n && s[r + j] == s[r - i + j]; ++j)
        ;
      z[i] = r - i + j, l = i, r += (j - 1);
    }
  }
}
long long get_amount(vector<long long> &cnt_s, vector<long long> &cnt_t,
                     string &s, string &t, long long n0, long long n1) {
  for (auto c : s) {
    cnt_s[c - '0']++;
  }
  for (auto c : t) {
    cnt_t[c - '0']++;
  }
  cnt_s[0] -= cnt_t[0], cnt_s[1] -= cnt_t[1];
  long long curr = 0;
  if (n0 != 0 && n1 != 0) {
    curr = min(cnt_s[0] / n0, cnt_s[1] / n1);
    cnt_s[0] -= curr * n0, cnt_s[1] -= curr * n1;
  } else if (n0 == 0) {
    curr = cnt_s[1] / n1;
    cnt_s[1] -= curr * n1;
  } else if (n1 == 0) {
    curr = cnt_s[0] / n0;
    cnt_s[0] -= curr * n0;
  }
  return curr;
}
void solve() {
  string s, t;
  cin >> s >> t;
  if (possible(s, t)) {
    string ans = "";
    vector<long long> z;
    z_fun(t, z);
    long long ind = 0, len = t.size();
    for (long long i = 1; i < len; ++i) {
      if (z[i] + i == len) {
        ind = i;
        break;
      }
    }
    long long n0 = 0, n1 = 0;
    z[0] = 0;
    for (long long i = z[ind]; i < t.size(); ++i) {
      if (t[i] == '0')
        n0++;
      else
        n1++;
    }
    vector<long long> cnt_s(2), cnt_t(2);
    long long cnt = get_amount(cnt_s, cnt_t, s, t, n0, n1);
    ans += t;
    string tmp = t.substr(z[ind], t.size() - z[ind]);
    cerr << "ind"
         << " = " << (ind) << "\n";
    ;
    cerr << "tmp"
         << " = " << (tmp) << "\n";
    ;
    cerr << "z[ind]"
         << " = " << (z[ind]) << "\n";
    ;
    cerr << "cnt"
         << " = " << (cnt) << "\n";
    ;
    for (long long i = 0; i < cnt; ++i) {
      ans += tmp;
    }
    for (long long i = 0; i < cnt_s[0]; ++i) {
      ans += "0";
    }
    for (long long i = 0; i < cnt_s[1]; ++i) {
      ans += "1";
    }
    cout << ans << "\n";
  } else {
    random_shuffle(s.begin(), s.end());
    cout << s << "\n";
  }
}
signed main() {
  boot_up();
  solve();
  return 0;
}
