func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   using ull = unsigned long long;   using ld = long double;   using pii = pair<int, int>;   using pll = pair<ll, ll>;   using pci = pair<char, int>;   using vi = vector<int>;   using vll = vector<ll>;   using vpii = vector<pii>;   const ll infll = 1e18 + 3;   const int maxn = 1e6 + 77;   const int nmax = 1e6 + 577;   const ll basell = 1e18 + 3;   const int mod = 1e9 + 7;   const ld eps = 1e-7;   const int inf = 1009000999;   const int nv = 100505;   const int baseint = 1000200013;   const ld PI = acos(-1.0);   inline bool EQ(ld a, ld b) { return fabs(a - b) < 1e-9; }   inline bool IF(int a, int b, int c) { return (a >= b && a <= c); }   inline bool IFS(int a, int b, int c) { return (a > b && a < c); }   template <typename T>   inline istream &operator>>(istream &_in, vector<T> &_v) {     for (auto &_i : _v) {       _in >> _i;     }     return _in;   }   mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());   int p[nmax];   int pref(string s) {     int n = ((int)(s).size());     int h = 0;     for (int i = 1; i < n; ++i) {       int j = p[i - 1];       while (s[i] != s[j] && j > 0) {         j = p[j - 1];       }       if (s[i] == s[j]) {         j++;       }       p[i] = j;       h = max(h, j);     }     return h;   }   int inline solve() {     ios::sync_with_stdio(NULL), cin.tie(NULL), cout.tie(NULL);     ;     string s, t;     cin >> s >> t;     if (((int)(s).size()) < ((int)(t).size())) {       return cout << s, 0;     }     int s0 = 0, s1 = 0;     for (char i : s) {       if (i ==  1 ) {         s1++;       } else {         s0++;       }     }     int t0 = 0, t1 = 0;     for (char i : t) {       if (i ==  1 ) {         t1++;       } else {         t0++;       }     }     if (s0 < t0 || s1 < t1) {       return cout << s, 0;     }     s0 -= t0;     s1 -= t1;     int m = ((int)(t).size());     int x = m - 1, y = 0;     for (int i = 0; i < (m / 2) + (m % 2 == 1); ++i) {       if (t[i] == t[x]) {         x--;         y = i + 1;       }     }     y = pref(t);     string a;     int a0 = 0, a1 = 0;     for (int i = p[m - 1]; i < m; ++i) {       a += t[i];       if (t[i] ==  1 ) {         a1++;       } else {         a0++;       }     }     string str = t;     int n = ((int)(s).size());     for (int i = 0; i < n; ++i) {       if (s0 < a0 || s1 < a1) {         break;       }       str += a;       s0 -= a0;       s1 -= a1;     }     for (int i = 0; i < s0; ++i) {       str +=  0 ;     }     for (int i = 0; i < s1; ++i) {       str +=  1 ;     }     cout << str;     return 0;   }   int32_t main() {     solve();     return 0;   }   