func_code_string: #include <bits/stdc++.h>   using namespace std;   using ll = long long;   uint64_t getSeed() {     auto ptr = new char;     delete ptr;     return (uint64_t)ptr +            chrono::high_resolution_clock::now().time_since_epoch().count();   }   mt19937 rnd(getSeed());   ll rndVal(uint64_t a, uint64_t b) {     return uniform_int_distribution<uint64_t>(a, b)(rnd);   }   constexpr uint64_t MOD = (1ull << 61) - 1;   inline uint64_t mod(uint64_t x) {     x++;     x = (x & MOD) + (x >> 61);     x = (x & MOD) + (x >> 61);     return x - 1;   }   uint64_t mulmod(const uint64_t a, const uint64_t b) {     uint64_t ha = a >> 32, la = uint32_t(a), hb = b >> 32, lb = uint32_t(b);     uint64_t h = ha * hb, m = ha * lb + la * hb, l = la * lb;     return mod((l & MOD) + (l >> 61) + (m >> 29) + (m << 35 >> 3) + (h << 3));   }   struct Hash {     vector<uint64_t> h;     vector<uint64_t> p;     void build(const string& s, const uint64_t base) {       int n = s.size();       h.resize(n + 1);       p.resize(n + 1);       h[0] = 1;       p[0] = 1;       for (int i = 0; i < n; i++) {         h[i + 1] = mod(mulmod(h[i], base) + s[i] + 130);         p[i + 1] = mulmod(p[i], base);       }     }     void build(const string& s) { build(s, rndVal(258, MOD - 1)); }     uint64_t query(int l, int r) {       return mod(h[r + 1] + MOD - mulmod(h[l], p[r - l + 1]));     }   };   string s, t;   int main() {     ios::sync_with_stdio(false);     cin >> s >> t;     int ns = s.size(), nt = t.size();     uint64_t base = rndVal(258, MOD - 1);     Hash hash;     hash.build(t, base);     int rep = 0;     for (int i = 0; i < nt - 1; i++) {       if (hash.query(0, i) == hash.query(nt - i - 1, nt - 1)) rep = i + 1;     }     int has[2] = {0, 0};     for (auto c : s) has[c -  0 ]++;     int needs[2] = {0, 0};     for (auto c : t) needs[c -  0 ]++;     if (needs[0] > has[0] or needs[1] > has[1]) {       cout << s << endl;       return 0;     }     cout << t;     has[0] -= needs[0];     has[1] -= needs[1];     for (int i = 0; i < rep; i++) needs[t[i] -  0 ]--;     while (has[0] >= needs[0] and has[1] >= needs[1]) {       for (int i = rep; i < nt; i++) {         cout << t[i];         has[t[i] -  0 ]--;       }     }     while (has[0]) {       cout <<  0 ;       has[0]--;     }     while (has[1]) {       cout <<  1 ;       has[1]--;     }     cout << endl;   }   