#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <set>
#include <iomanip>
#include <iterator>
#include <cmath>
#include <map>
#include <string.h>
#include <ctime>
#include <queue>
#include<unordered_map>
#define ll long long
#define endl '\n'
using namespace std;
vector<int>dirx{ 0,1,-1,0,1,1,-1,-1 };
vector<int>diry{ -1,0,0,1,1,-1,1,-1 };
bool valid(int n, int m, int x, int y) {
return x >= 0 && y >= 0 && x < n&& y < m;
}
ll gcd(ll a, ll b) {
if (b == 0)
return a;
return gcd(b, a % b);
}
ll lcm(ll a, ll b) {
return (a * b) / gcd(a, b);
}
const int N = 3e3 + 5;
const ll mod = 1e9 + 7;
int inf = 1e9;
map<pair<int, int>,string > dp;
string s1, s2;
int n, m;
string lcm(int i, int j) {
if (i == n || j == m)
return "";
if (dp.find({ i, j }) != dp.end())
return dp[{i, j}];
string& ret = dp[{i, j}];
ret = "";
if (s1[i] == s2[j])
ret = s1[i] + lcm(i + 1, j + 1);
else {
string path1 = lcm(i + 1, j);
string path2 = lcm(i, j + 1);
if (path1.size() >= path2.size())
ret = path1;
else
ret = path2;
}
return ret;
}
void solve() {
cin >> s1 >> s2;
n = s1.size(), m = s2.size();
dp.clear();
cout << lcm(0, 0) << endl;
}
//void files() {
//
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
//}
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
/*int t; cin >> t;
while (t--)*/
solve();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8aW9tYW5pcD4KI2luY2x1ZGUgPGl0ZXJhdG9yPgojaW5jbHVkZSA8Y21hdGg+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8cXVldWU+CiNpbmNsdWRlPHVub3JkZXJlZF9tYXA+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZW5kbCAnXG4nCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp2ZWN0b3I8aW50PmRpcnh7IDAsMSwtMSwwLDEsMSwtMSwtMSB9Owp2ZWN0b3I8aW50PmRpcnl7IC0xLDAsMCwxLDEsLTEsMSwtMSB9OwoKYm9vbCB2YWxpZChpbnQgbiwgaW50IG0sIGludCB4LCBpbnQgeSkgewoJcmV0dXJuIHggPj0gMCAmJiB5ID49IDAgJiYgeCA8IG4mJiB5IDwgbTsKfQoKbGwgZ2NkKGxsIGEsIGxsIGIpIHsKCWlmIChiID09IDApCgkJcmV0dXJuIGE7CglyZXR1cm4gZ2NkKGIsIGEgJSBiKTsKfQpsbCBsY20obGwgYSwgbGwgYikgewoJcmV0dXJuIChhICogYikgLyBnY2QoYSwgYik7Cn0KCgoKY29uc3QgaW50IE4gPSAzZTMgKyA1Owpjb25zdCBsbCBtb2QgPSAxZTkgKyA3OwppbnQgaW5mID0gMWU5OwptYXA8cGFpcjxpbnQsIGludD4sc3RyaW5nID4gZHA7CnN0cmluZyBzMSwgczI7CmludCBuLCBtOwpzdHJpbmcgbGNtKGludCBpLCBpbnQgaikgewoJaWYgKGkgPT0gbiB8fCBqID09IG0pCgkJcmV0dXJuICIiOwoJaWYgKGRwLmZpbmQoeyBpLCBqIH0pICE9IGRwLmVuZCgpKQoJCXJldHVybiBkcFt7aSwgan1dOwoJc3RyaW5nJiByZXQgPSBkcFt7aSwgan1dOwoJcmV0ID0gIiI7CglpZiAoczFbaV0gPT0gczJbal0pCgkJcmV0ID0gczFbaV0gKyBsY20oaSArIDEsIGogKyAxKTsKCWVsc2UgewoJCXN0cmluZyBwYXRoMSA9IGxjbShpICsgMSwgaik7CgkJc3RyaW5nIHBhdGgyID0gbGNtKGksIGogKyAxKTsKCQlpZiAocGF0aDEuc2l6ZSgpID49IHBhdGgyLnNpemUoKSkKCQkJcmV0ID0gcGF0aDE7CgkJZWxzZQoJCQlyZXQgPSBwYXRoMjsKCX0KCXJldHVybiByZXQ7CQp9Cgp2b2lkIHNvbHZlKCkgewoJY2luID4+IHMxID4+IHMyOwoJbiA9IHMxLnNpemUoKSwgbSA9IHMyLnNpemUoKTsKCWRwLmNsZWFyKCk7Cgljb3V0IDw8IGxjbSgwLCAwKSA8PCBlbmRsOwp9CgovL3ZvaWQgZmlsZXMoKSB7Ci8vCi8vCWZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwovLwlmcmVvcGVuKCJvdXRwdXQudHh0IiwgInciLCBzdGRvdXQpOwovL30KCgppbnQgbWFpbigpIHsKCWlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7IGNpbi50aWUoMCk7IGNvdXQudGllKDApOwoJLyppbnQgdDsgY2luID4+IHQ7Cgl3aGlsZSAodC0tKSovCglzb2x2ZSgpOwoKCglyZXR1cm4gMDsKfQ==