#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
void chkmax(int &a, int b) {
  if (b > a) {
    a = b;
  }
  return;
}
void chkmin(int &a, int b) {
  if (b < a) {
    a = b;
  }
  return;
}
long long ppow(long long x, long long s) {
  if (!s) return 1;
  if (!(s - 1)) return x % mod;
  if (s % 2) return (x * ppow(x, s - 1)) % mod;
  long long b = ppow(x, s / 2);
  return (b * b) % mod;
}
vector<int> prefix_function(string s) {
  int n = (int)s.length();
  vector<int> pi(n);
  pi[0] = 0;
  for (int i = 1; i < n; ++i) {
    int j = pi[i - 1];
    while (j > 0 && s[i] != s[j]) j = pi[j - 1];
    if (s[i] == s[j]) ++j;
    pi[i] = j;
  }
  return pi;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  string s, t;
  cin >> s >> t;
  vector<int> cnts(2, 0), cntt(2, 0);
  for (auto x : s) {
    cnts[x - '0']++;
  }
  for (auto x : t) {
    cntt[x - '0']++;
  }
  int n = t.size();
  vector<vector<int> > pref(2, vector<int>(n));
  pref[0][0] = (t[0] == '0');
  pref[1][0] = (t[0] == '1');
  for (int i = 1; i < n; i++) {
    pref[0][i] = pref[0][i - 1];
    pref[1][i] = pref[1][i - 1];
    pref[t[i] - '0'][i]++;
  }
  vector<int> p = prefix_function(t);
  int gg = p[n - 1];
  int f = (cnts[1] >= cntt[1] && cnts[0] >= cntt[0]);
  if (f) {
    cout << t;
  } else {
    cout << s;
    return 0;
  }
  cnts[0] -= cntt[0];
  cnts[1] -= cntt[1];
  string tt = "";
  for (int i = gg; i < n; i++) {
    tt += t[i];
  }
  cntt[0] = pref[0][n - 1];
  cntt[1] = pref[1][n - 1];
  if (gg > 0) {
    cntt[0] -= pref[0][gg - 1];
    cntt[1] -= pref[1][gg - 1];
  }
  int g = 1e8;
  if (cntt[0] > 0) {
    chkmin(g, cnts[0] / cntt[0]);
  }
  if (cntt[1] > 0) {
    chkmin(g, cnts[1] / cntt[1]);
  }
  for (int i = 0; i < g; i++) {
    cout << tt;
  }
  cnts[0] -= g * cntt[0];
  cnts[1] -= g * cntt[1];
  for (int i = 0; i < cnts[0]; i++) {
    cout << '0';
  }
  for (int i = 0; i < cnts[1]; i++) {
    cout << '1';
  }
  return 0;
}
