#include <bits/stdc++.h>
using namespace std;
using ll = long long;
uint64_t getSeed() {
  auto ptr = new char;
  delete ptr;
  return (uint64_t)ptr +
         chrono::high_resolution_clock::now().time_since_epoch().count();
}
mt19937 rnd(getSeed());
ll rndVal(uint64_t a, uint64_t b) {
  return uniform_int_distribution<uint64_t>(a, b)(rnd);
}
constexpr uint64_t MOD = (1ull << 61) - 1;
inline uint64_t mod(uint64_t x) {
  x++;
  x = (x & MOD) + (x >> 61);
  x = (x & MOD) + (x >> 61);
  return x - 1;
}
uint64_t mulmod(const uint64_t a, const uint64_t b) {
  uint64_t ha = a >> 32, la = uint32_t(a), hb = b >> 32, lb = uint32_t(b);
  uint64_t h = ha * hb, m = ha * lb + la * hb, l = la * lb;
  return mod((l & MOD) + (l >> 61) + (m >> 29) + (m << 35 >> 3) + (h << 3));
}
struct Hash {
  vector<uint64_t> h;
  vector<uint64_t> p;
  void build(const string& s, const uint64_t base) {
    int n = s.size();
    h.resize(n + 1);
    p.resize(n + 1);
    h[0] = 1;
    p[0] = 1;
    for (int i = 0; i < n; i++) {
      h[i + 1] = mod(mulmod(h[i], base) + s[i] + 130);
      p[i + 1] = mulmod(p[i], base);
    }
  }
  void build(const string& s) { build(s, rndVal(258, MOD - 1)); }
  uint64_t query(int l, int r) {
    return mod(h[r + 1] + MOD - mulmod(h[l], p[r - l + 1]));
  }
};
string s, t;
int main() {
  ios::sync_with_stdio(false);
  cin >> s >> t;
  int ns = s.size(), nt = t.size();
  uint64_t base = rndVal(258, MOD - 1);
  Hash hash;
  hash.build(t, base);
  int rep = 0;
  for (int i = 0; i < nt - 1; i++) {
    if (hash.query(0, i) == hash.query(nt - i - 1, nt - 1)) rep = i + 1;
  }
  int has[2] = {0, 0};
  for (auto c : s) has[c - '0']++;
  int needs[2] = {0, 0};
  for (auto c : t) needs[c - '0']++;
  if (needs[0] > has[0] or needs[1] > has[1]) {
    cout << s << endl;
    return 0;
  }
  cout << t;
  has[0] -= needs[0];
  has[1] -= needs[1];
  for (int i = 0; i < rep; i++) needs[t[i] - '0']--;
  while (has[0] >= needs[0] and has[1] >= needs[1]) {
    for (int i = rep; i < nt; i++) {
      cout << t[i];
      has[t[i] - '0']--;
    }
  }
  while (has[0]) {
    cout << '0';
    has[0]--;
  }
  while (has[1]) {
    cout << '1';
    has[1]--;
  }
  cout << endl;
}
