/*
dp题
题意:有两个字符串a, b,求的一个最短的字符串,使a, b是该字符串的字串;
先打表,如,
最长子序列为2, 再用倒回去的思想,求该字符串,判断dp[i-1][j] 与 dp[i][j-1] ,前者小,输出b[j], 反之输出a[i], 相同也输出,且i--, j--;
*/
#include<iostream>
#include<string>
#define Max(x, y) x > y ? x : y
using namespace std;
char aa[101], bb[101], c[202], a[102], b[102];
int dp[102][102];
int main()
{
while(scanf("%s%s", aa, bb) != EOF )
{
memset(dp, 0, sizeof(dp));
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(c, 0, sizeof(c));
a[0] = '0';
strcat(a, aa);
b[0] = '0';
strcat(b, bb);
int i, j, l1, l2, k;
l1 = strlen(aa);
l2 = strlen(bb);
for( i=1; i <= l1; i++ )
{
for( j=1; j <= l2; j++ )
{
if(a[i] != b[j])
dp[i][j] = Max(dp[i-1][j], dp[i][j-1]);
else
dp[i][j] = dp[i-1][j-1] + 1;
}
}
int t = 0;
i = l1;
j = l2;
while(1)
{
if(a[i] == b[j])
{
c[t++] = a[i];
i--;
j--;
}
else if(dp[i-1][j] > dp[i][j-1])
c[t++] = a[i], i--;
else
c[t++] = b[j], j--;
if(i == 0)
{
for( k=j; k > 0; k-- )
c[t++] = b[k];
break;
}
if(j == 0)
{
for( k=i; k > 0; k-- )
c[t++] = a[k];
break;
}
}
int l = strlen(c);
for( i=l-1; i >= 0; i-- )
putchar(c[i]);
puts("");
}
return 0;
}