#include <bits/stdc++.h>
using namespace std;
static const int mod = 1e9 + 7, m1 = 1e9 + 123, p = 1e9 + 7;
string s, t;
int pref1[500500], mx;
long long pref2[500500];
vector<int> v1 = {1};
vector<long long> v2 = {1};
bool check(int len) {
  int need1 = 1ll * pref1[len] * v1[mx - (len - 1)] % m1;
  long long need2 = pref2[len] * v2[mx - (len - 1)];
  int j = (int)t.size() - len;
  int hash1 = pref1[len + j] - pref1[j];
  if (hash1 < 0) hash1 += m1;
  hash1 = 1ll * hash1 * v1[mx - (j + len - 1)] % m1;
  long long hash2 = (pref2[len + j] - pref2[j]) * v2[mx - (j + len - 1)];
  return (hash1 == need1 && hash2 == need2);
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  cin >> s >> t;
  int pa = 0, z = 0, o = 0;
  mx = (int)t.size();
  for (int i = 1; i <= mx; i++) {
    v1.push_back(1ll * v1[i - 1] * p % m1);
    v2.push_back(v2[i - 1] * p);
  }
  for (int i = 0; i < s.size(); i++) {
    z += (s[i] == '0');
    o += (s[i] == '1');
    if (i < t.size()) {
      pref1[i + 1] = (pref1[i] + 1ll * t[i] * v1[i]) % m1;
      pref2[i + 1] = pref2[i] + t[i] * v2[i];
    }
  }
  for (int i = 1; i <= (int)t.size() / 2; i++) {
    if (check(i)) pa = i;
  }
  bool bo = 0;
  while (1) {
    int i = 0;
    if (bo) i = pa;
    for (; i < t.size(); i++) {
      if (t[i] == '0' && z)
        cout << 0, z--;
      else if (t[i] == '1' && o)
        cout << 1, o--;
      else if (z)
        cout << 0, z--;
      else if (o)
        cout << 1, o--;
      else
        break;
    }
    if (z + o == 0) break;
    bo = 1;
  }
  cout << '\n';
  return 0;
}
