#include <bits/stdc++.h>
using namespace std;
class LCS {
public:
string longestLCS(string& s, string& t) {
int m = s.size();
int n = t.size();
vector<vector<int>> dp(m+1, vector<int>(n+1, 0));
// Build DP table
for(int i = 1; i <= m; ++i) {
for(int j = 1; j <= n; ++j) {
if(s[i-1] == t[j-1])
dp[i][j] = 1 + dp[i-1][j-1];
else
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
// Backtrack to build LCS
int i = m, j = n;
string res = "";
while(i > 0 && j > 0) {
if(s[i-1] == t[j-1]) {
res.push_back(s[i-1]);
i--;
j--;
} else if(dp[i-1][j] > dp[i][j-1]) {
i--;
} else {
j--;
}
}
reverse(res.begin(), res.end());
return res;
}
};
int main() {
string s, t;
cin >> s >> t;
LCS obj;
cout << obj.longestLCS(s, t) << endl;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBMQ1MgewpwdWJsaWM6CiAgc3RyaW5nIGxvbmdlc3RMQ1Moc3RyaW5nJiBzLCBzdHJpbmcmIHQpIHsKICAgIGludCBtID0gcy5zaXplKCk7CiAgICBpbnQgbiA9IHQuc2l6ZSgpOwoKICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZHAobSsxLCB2ZWN0b3I8aW50PihuKzEsIDApKTsKCiAgICAvLyBCdWlsZCBEUCB0YWJsZQogICAgZm9yKGludCBpID0gMTsgaSA8PSBtOyArK2kpIHsKICAgICAgZm9yKGludCBqID0gMTsgaiA8PSBuOyArK2opIHsKICAgICAgICBpZihzW2ktMV0gPT0gdFtqLTFdKQogICAgICAgICAgZHBbaV1bal0gPSAxICsgZHBbaS0xXVtqLTFdOwogICAgICAgIGVsc2UKICAgICAgICAgIGRwW2ldW2pdID0gbWF4KGRwW2ktMV1bal0sIGRwW2ldW2otMV0pOwogICAgICB9CiAgICB9CgogICAgLy8gQmFja3RyYWNrIHRvIGJ1aWxkIExDUwogICAgaW50IGkgPSBtLCBqID0gbjsKICAgIHN0cmluZyByZXMgPSAiIjsKCiAgICB3aGlsZShpID4gMCAmJiBqID4gMCkgewogICAgICBpZihzW2ktMV0gPT0gdFtqLTFdKSB7CiAgICAgICAgcmVzLnB1c2hfYmFjayhzW2ktMV0pOwogICAgICAgIGktLTsgCiAgICAgICAgai0tOwogICAgICB9IGVsc2UgaWYoZHBbaS0xXVtqXSA+IGRwW2ldW2otMV0pIHsKICAgICAgICBpLS07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgai0tOwogICAgICB9CiAgICB9CgogICAgcmV2ZXJzZShyZXMuYmVnaW4oKSwgcmVzLmVuZCgpKTsKICAgIHJldHVybiByZXM7CiAgfQp9OwoKaW50IG1haW4oKSB7CiAgc3RyaW5nIHMsIHQ7CiAgY2luID4+IHMgPj4gdDsKICBMQ1Mgb2JqOwogIGNvdXQgPDwgb2JqLmxvbmdlc3RMQ1MocywgdCkgPDwgZW5kbDsKICByZXR1cm4gMDsKfQo=