#include <bits/stdc++.h>
using namespace std;
typedef set<int, bool (*)(int, int)> sic;
typedef set<pair<int, int>, bool (*)(pair<int, int>, pair<int, int>)> spic;
typedef set<long long int, bool (*)(long long int, long long int)> slc;
typedef set<pair<long long int, long long int>,
            bool (*)(pair<long long int, long long int>,
                     pair<long long int, long long int>)>
    splc;
pair<int, int> operator+(const pair<int, int>& x, const pair<int, int>& y) {
  return {x.first + y.first, x.second + y.second};
}
pair<long long int, long long int> operator+(
    const pair<long long int, long long int>& x,
    const pair<long long int, long long int>& y) {
  return {x.first + y.first, x.second + y.second};
}
long long int gcd(long long int a, long long int b) {
  return a >= b ? b ? gcd(b, a % b) : a : gcd(b, a);
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
long long int exp(long long int a, long long int b) {
  long long int r = 1;
  while (b)
    r = (1000000007LL +
         ((long long int)(r) * (long long int)(b & 1 ? a : 1)) % 1000000007LL) %
        1000000007LL,
    a = (1000000007LL +
         ((long long int)(a) * (long long int)(a)) % 1000000007LL) %
        1000000007LL,
    b >>= 1;
  return r;
}
long long int fac[500000];
long long int ifac[500000];
void mkfac() {
  fac[0] = ifac[0] = 1;
  for (int i = (int)(!1); i <= (int)(500000 - 1 - 1); i++)
    fac[i] =
        (1000000007LL +
         ((long long int)(fac[i - 1]) * (long long int)(i)) % 1000000007LL) %
        1000000007LL,
    ifac[i] = exp((fac[i]), 1000000007LL - 2);
}
string out;
long long int T;
unordered_set<int> adj[500000];
int A[500000];
int N, M, K;
int u, v;
string R, S, U;
void kmp_lps(int* A, const string& S) {
  int N = S.size();
  memset(A, 0, N * sizeof(*A));
  for (int i = 1; i < N; i++) {
    int k = i - 1;
    do {
      if (S[A[k]] == S[i]) A[i] = A[k] + 1;
      k = A[k] - 1;
    } while (k >= 0 && !A[i]);
  }
}
void process() {
  cin >> R >> S;
  N = S.size();
  kmp_lps(A, S);
  int n[2] = {0, 0};
  for (auto e : R) n[e - '0']++;
  for (auto e : S) n[e - '0']--;
  if (n[0] < 0 || n[1] < 0) {
    out += R + "\n";
    return;
  }
  U = S;
  bool gd = 1;
  while (gd)
    for (int i = (int)(A[N - 1]); i <= (int)(N - 1); i++)
      if (n[S[i] - '0'])
        n[S[i] - '0']--, U += S[i];
      else {
        gd = 0;
        break;
      }
  while (n[0]) U += "0", n[0]--;
  while (n[1]) U += "1", n[1]--;
  out += U;
  out += "\n";
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  T = 1;
  for (int t = (int)(!1); t <= (int)(T - 1); t++) process();
  cout << out;
  return 0;
}
