#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
const int mod = (int)1e9 + 7;
const int N = 1e5 + 10;
const long long inf = -1e17;
struct event {
  long long a, b, c, d;
};
void solve() {
  string s, t;
  cin >> s >> t;
  int n = int(s.size()), n2 = int(t.size());
  int one = 0;
  for (int i = 0; i < n; i++)
    if (s[i] == '1') one++;
  vector<int> z(n2);
  if (n < n2) {
    cout << s << "\n";
    return;
  }
  int maxval = 0, ind = 0;
  reverse(t.begin(), t.end());
  for (int i = 1, l = 0, r = 0; i < n2; i++) {
    if (i <= r) z[i] = min(r - i + 1, z[i - l]);
    while (i + z[i] < n && t[z[i]] == t[z[i] + i]) ++z[i];
    if (z[i] > maxval && z[i] + i == n2) {
      maxval = z[i];
      ind = i;
    }
    if (z[i] + i - 1 < r) l = i, r = z[i] + i - 1;
  }
  reverse(t.begin(), t.end());
  string res = t;
  string p = t.substr(maxval, n2 - maxval);
  while (int(res.size()) < n) {
    int mn = min(int(p.size()), n - int(res.size()));
    string rr = p.substr(0, mn);
    res += rr;
  }
  for (int i = 0; i < n; i++)
    if (res[i] == '1') one--;
  char c = (one > 0) ? '0' : '1';
  char d = (one > 0) ? '1' : '0';
  int l = (one < 0) ? 1 : -1;
  for (int i = n - 1; i >= 0; i--)
    if (res[i] == c && one != 0) res[i] = d, one += l;
  cout << res;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solve();
}
