#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <stack>
#include <cstring>
#include <cstdio>
#include <string>
#include <stack>
using namespace std;
char a[1000 + 5],b[1000 + 5];
int dp[1000 + 5][1000 +5];
int dis[1000 + 5][1000 + 5][2];
char a[1000 + 5],b[1000 + 5];
int dp[1000 + 5][1000 +5];
int dis[1000 + 5][1000 + 5][2];
int main()
{
scanf("%s%s",a+1,b+1);
stack<char> s;
int n = strlen(a+1);
int m = strlen(b+1);
{
scanf("%s%s",a+1,b+1);
stack<char> s;
int n = strlen(a+1);
int m = strlen(b+1);
for(int i = 1; i <= n; i++)
for(int j = 1; j <= m; j++)
if(a[i] == b[j])
{
dis[i][j][0] = i-1;
dis[i][j][1] = j-1;
dp[i][j] = dp[i-1][j-1] + 1;
}
else if(dp[i-1][j] < dp[i][j-1])
{
dis[i][j][0] = i;
dis[i][j][1] = j-1;
dp[i][j] = dp[i][j-1];
}
else
{
dis[i][j][0] = i-1;
dis[i][j][1] = j;
dp[i][j] = dp[i-1][j];
}
for(int j = 1; j <= m; j++)
if(a[i] == b[j])
{
dis[i][j][0] = i-1;
dis[i][j][1] = j-1;
dp[i][j] = dp[i-1][j-1] + 1;
}
else if(dp[i-1][j] < dp[i][j-1])
{
dis[i][j][0] = i;
dis[i][j][1] = j-1;
dp[i][j] = dp[i][j-1];
}
else
{
dis[i][j][0] = i-1;
dis[i][j][1] = j;
dp[i][j] = dp[i-1][j];
}
while(dp[n][m] != 0)
{
int nx = dis[n][m][0];
int my = dis[n][m][1];
if(dp[n][m] > dp[nx][my])
s.push(a[n]);
n = nx;
m = my;
}
while(!s.empty())
{
cout<<s.top();
s.pop();
}
cout<<endl;
{
cout<<s.top();
s.pop();
}
cout<<endl;
return 0;
}
}