Source Code
#include "bits/stdc++.h"

using namespace std;

#define int int64_t
#define ll int64_t

// typedef unsigned int        uint;
// typedef long long int       ll;
// typedef unsigned long long  ull;
typedef long long lli ;
typedef pair<int, int>      pii;
typedef pair<lli, lli>      pll;
typedef pair<lli, pll>      lll;
typedef vector<int>         vi;
typedef vector<lli>         vl;
typedef vector<pii>         vpii;
typedef vector<pll>         vpll;

#define endl '\n'
#define fastIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define freopenI freopen("input.txt", "r", stdin);
#define freopenO freopen("output.txt", "w", stdout);

const int INF = 0x3f3f3f3f;
const lli INFLL = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-9;
const double  PI = acos(-1);

mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

int rand(int x, int y) {
    return uniform_int_distribution<int>(x, y)(rng);
}

int mul(int a, int b){
	return (1ll * a * b) % MOD;
}

int add(int a, int b){
	return (1ll * a + b + MOD + MOD) % MOD;
}

int pow_exp(int n, int p){
	if(!p) return 1;
	if(p&1) return mul(n, pow_exp(n, p-1));
	int tmp = pow_exp(n, p/2);
	return mul(tmp, tmp);
}

const int  MAX = 2e5 + 10;
const int NMAX = 2e5 + 10;
const int MMAX = 2e5 + 10;
const int LOG_MAX = ceil(log2(double(NMAX)));
const int BLOCK = ceil(sqrt(double(NMAX)));

int cnt[NMAX / 10];
set<int> v[27], y[27];
int L [NMAX];
        string s, t;
bool ok(int l) {
    int cur = -5;
    if (L[0] >= l) return 1;
    for (int i=0;i<t.size();i++){
        auto nxt = v[t[i] - 'a'].upper_bound(cur);
        if (nxt == v[t[i] - 'a'].end()) return 0;
        cur = *nxt;
        if (i+1 < t.size()){
            if (L[i + 1] - cur > l) return 1;
        }
    }
    return (s.size() - cur - 1 >= l);
}
int idx = -1;
int32_t main(){

    fastIO;

#ifdef LOCAL
    freopenI;
    freopenO;
#endif

    //int t; cin >> t; while(t--){
        // aaaa
        // bb
        // ab
        // aaa
        // bbb
        string a, b;
        cin >> a >> b;
        if (a.size() != b.size()){
            return !printf("-1");
        }
        if (a == b){
            cout << a << endl;
            return 0;
        }
        string A[a.size()], B[b.size()];
        string t = "";
        for (int i=0;i<a.size();i++)
        {
            t += a[i];
            A[i] = t;
        }
        t="";
        for (int i=b.size()-1;i>=0;i--)
        {
            t += b[i];
            string x = t;
            reverse(t.begin(), t.end());
            B[b.size()-1-i] = t;

            t = x;
        }
        for (int i=0;i<b.size();i++){
            string x = A[i];
            for (int j=i;j<a.size();j++){
            string y = B[j];
            if ( y + a.substr(x.size()) == b.substr(0, y.size()) + x && (x + y).size() == a.size()) {
                cout << x + y << endl;
                return 0;
            }
            }
        }
    //}
}

/*
  arrays sizes
  INFLL & 1ll
  if its an interactive problem : #define endl '\n'

  notes :


*/
Copy
Right into Two Random Bruh
GNU G++17
0 ms
360 KB
Wrong Answer