#include<bits/stdc++.h>
//#include <boost/multiprecision/cpp_int.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define fast std::ios::sync_with_stdio(0);cin.tie(NULL);cout.tie(NULL)
#define clr0(a) memset((a), 0, sizeof(a))
#define clr1(a) memset((a), -1, sizeof(a))
#define srtin1 cin.ignore ( std::numeric_limits<std::streamsize>::max(), '\n' );
#define strin2 getline(cin, text);
#define ll long long
#define test cout<<"archit\n"
#define debug(x) cout<<x<<" "
#define debug1(x) cout<<x<<"\n"
#define debug2(x,y) cout<<x<<" "<<y<<"\n"
#define debug3(x, y, z) cout<<x<<" "<<y<<" "<<z<<"\n"
#define pb push_back
#define pi pair<int,int>
#define fi first
#define si second
#define mod (ll)1000000007
#define mxn 1000005
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
using namespace std;
//using namespace boost::multiprecision;
using namespace __gnu_pbds;
int dp[1005][1005];
int solve(string a, string b, int n, int m, int i, int j)
{
if(i==n || j==m){
return 0;
}
if(dp[i][j] > -1){
return dp[i][j];
}
int ans=0;
if(a[i] == b[j]){
ans = 1+solve(a, b, n, m, i+1, j+1);
}
else{
ans = solve(a, b, n, m, i+1, j);
ans = max(ans, solve(a, b, n, m, i, j+1));
}
return dp[i][j] = ans;
}
int main()
{
string a,b;
cin>>a>>b;
int n=a.length();
int m=b.length();
memset(dp, 0, sizeof(dp));
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(a[i-1] == b[j-1]){
dp[i][j] = 1+dp[i-1][j-1];
}
else{
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
}
string ans="";
int i=n,j=m;
while(i>=0 && j>=0){
if(dp[i][j] == 1+dp[i-1][j-1]){
ans+=a[i-1];
i-=1;
j-=1;
}
else if(dp[i][j] == dp[i-1][j]){
--i;
}
else{
--j;
}
}
std::reverse(ans.begin(), ans.end());
cout<<ans;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KLy8jaW5jbHVkZSA8Ym9vc3QvbXVsdGlwcmVjaXNpb24vY3BwX2ludC5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4KI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+CiNkZWZpbmUgZmFzdCBzdGQ6Omlvczo6c3luY193aXRoX3N0ZGlvKDApO2Npbi50aWUoTlVMTCk7Y291dC50aWUoTlVMTCkKI2RlZmluZSBjbHIwKGEpIG1lbXNldCgoYSksIDAsIHNpemVvZihhKSkKI2RlZmluZSBjbHIxKGEpIG1lbXNldCgoYSksIC0xLCBzaXplb2YoYSkpCiNkZWZpbmUgc3J0aW4xIGNpbi5pZ25vcmUgKCBzdGQ6Om51bWVyaWNfbGltaXRzPHN0ZDo6c3RyZWFtc2l6ZT46Om1heCgpLCAnXG4nICk7CiNkZWZpbmUgc3RyaW4yIGdldGxpbmUoY2luLCB0ZXh0KTsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSB0ZXN0IGNvdXQ8PCJhcmNoaXRcbiIKI2RlZmluZSBkZWJ1Zyh4KSBjb3V0PDx4PDwiICIKI2RlZmluZSBkZWJ1ZzEoeCkgY291dDw8eDw8IlxuIgojZGVmaW5lIGRlYnVnMih4LHkpIGNvdXQ8PHg8PCIgIjw8eTw8IlxuIgojZGVmaW5lIGRlYnVnMyh4LCB5LCB6KSBjb3V0PDx4PDwiICI8PHk8PCIgIjw8ejw8IlxuIgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIHBpIHBhaXI8aW50LGludD4KI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNpIHNlY29uZAojZGVmaW5lIG1vZCAobGwpMTAwMDAwMDAwNwojZGVmaW5lIG14biAxMDAwMDA1CiNkZWZpbmUgb3JkZXJlZF9zZXQgdHJlZTxpbnQsIG51bGxfdHlwZSxsZXNzPGludD4sIHJiX3RyZWVfdGFnLHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy91c2luZyBuYW1lc3BhY2UgYm9vc3Q6Om11bHRpcHJlY2lzaW9uOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsKaW50IGRwWzEwMDVdWzEwMDVdOwppbnQgc29sdmUoc3RyaW5nIGEsIHN0cmluZyBiLCBpbnQgbiwgaW50IG0sIGludCBpLCBpbnQgaikKewogICAgaWYoaT09biB8fCBqPT1tKXsKICAgICAgICByZXR1cm4gMDsKICAgIH0KICAgIGlmKGRwW2ldW2pdID4gLTEpewogICAgICAgIHJldHVybiBkcFtpXVtqXTsKICAgIH0KICAgIGludCBhbnM9MDsKICAgIGlmKGFbaV0gPT0gYltqXSl7CiAgICAgICAgYW5zID0gMStzb2x2ZShhLCBiLCBuLCBtLCBpKzEsIGorMSk7CiAgICB9CiAgICBlbHNlewogICAgICAgIGFucyA9IHNvbHZlKGEsIGIsIG4sIG0sIGkrMSwgaik7CiAgICAgICAgYW5zID0gbWF4KGFucywgc29sdmUoYSwgYiwgbiwgbSwgaSwgaisxKSk7CiAgICB9CiAgICByZXR1cm4gZHBbaV1bal0gPSBhbnM7Cn0KaW50IG1haW4oKQp7CiAgICBzdHJpbmcgYSxiOwogICAgY2luPj5hPj5iOwogICAgaW50IG49YS5sZW5ndGgoKTsKICAgIGludCBtPWIubGVuZ3RoKCk7CiAgICBtZW1zZXQoZHAsIDAsIHNpemVvZihkcCkpOwogICAgZm9yKGludCBpPTE7aTw9bjtpKyspewogICAgICAgIGZvcihpbnQgaj0xO2o8PW07aisrKXsKICAgICAgICAgICAgaWYoYVtpLTFdID09IGJbai0xXSl7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IDErZHBbaS0xXVtqLTFdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IG1heChkcFtpLTFdW2pdLCBkcFtpXVtqLTFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHN0cmluZyBhbnM9IiI7CiAgICBpbnQgaT1uLGo9bTsKICAgIHdoaWxlKGk+PTAgJiYgaj49MCl7CiAgICAgICAgaWYoZHBbaV1bal0gPT0gMStkcFtpLTFdW2otMV0pewogICAgICAgICAgICBhbnMrPWFbaS0xXTsKICAgICAgICAgICAgaS09MTsKICAgICAgICAgICAgai09MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZihkcFtpXVtqXSA9PSBkcFtpLTFdW2pdKXsKICAgICAgICAgICAgLS1pOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICAtLWo7CiAgICAgICAgfQogICAgfQogICAgc3RkOjpyZXZlcnNlKGFucy5iZWdpbigpLCBhbnMuZW5kKCkpOwogICAgY291dDw8YW5zOwogICAgcmV0dXJuIDA7Cn0K