#include <bits/stdc++.h>
using namespace std;
const int N = 500500;
void ComputePrefix(string p);
int F[N][2];
int Cnts[2];
int Cntt[2];
int need[2];
int main() {
  string s, t;
  cin >> s >> t;
  for (int i = 0; i < s.size(); i++) s[i] -= '0';
  for (int i = 0; i < t.size(); i++) t[i] -= '0';
  for (int i = 0; i < s.size(); i++) Cnts[s[i]]++;
  for (int i = 0; i < t.size(); i++) Cntt[t[i]]++;
  if (Cnts[0] < Cntt[0] || Cnts[1] < Cntt[1]) {
    return cout << string(Cnts[1], '1') << string(Cnts[0], '0'), 0;
  }
  ComputePrefix(t);
  int n = t.size();
  int best = 1;
  if (F[n][0] > F[n][1]) best = 0;
  int has = F[n][best];
  need[best]++;
  for (int i = has; i < n; i++) need[t[i]]++;
  for (int i = 0; i < t.size(); i++) printf("%d", t[i]);
  Cnts[0] -= Cntt[0];
  Cnts[1] -= Cntt[1];
  while (Cnts[0] >= need[0] && Cnts[1] >= need[1]) {
    printf("%d", best);
    for (int i = has; i < n; i++) printf("%d", t[i]);
    Cnts[0] -= need[0];
    Cnts[1] -= need[1];
  }
  assert(Cnts[1] >= 0);
  assert(Cnts[0] >= 0);
  while (Cnts[1]--) printf("1");
  while (Cnts[0]--) printf("0");
}
void ComputePrefix(string p) {
  int m = p.size();
  vector<int> LongestPrifex(m, 0);
  for (int i = 1, k = 0; i < m; i++) {
    while (k > 0 && p[i] != p[k]) k = LongestPrifex[k - 1];
    if (p[i] == p[k])
      LongestPrifex[i] = ++k;
    else
      LongestPrifex[i] = k;
  }
  for (int k = 0; k <= m; k++)
    for (char c = 0; c <= 1; c++)
      if (k < m && p[k] == c)
        F[k][c] = k + 1;
      else
        F[k][c] = (k ? F[LongestPrifex[k - 1]][c] : 0);
}
