#include<string.h>
#include<algorithm>
#include<iostream>
#include<stack>
using namespace std;
const int N=1e5+5;
char s1[N],s2[N];
int dp[1500][1500];
int main(){
scanf("%s %s",s1,s2);
int len1=strlen(s1);
int len2=strlen(s2);
int ans=0;
for(int i=1;i<=len1;i++){
for(int j=1;j<=len2;j++){
if(s1[i-1]==s2[j-1])
dp[i][j]=dp[i-1][j-1]+1;
ans=max(ans,dp[i][j]);
}
}
//printf("%d\n",ans);
stack<char>ss;
int p1=0,p2=0,leap=0;
for(int i=0;i<=len1&&!leap;i++)
for(int j=0;j<=len2;j++)
if(dp[i][j]==ans){
p1=i;
p2=j;
leap=1;
break;
}
while(p1>0&&p2>0){
if(dp[p1][p2])
ss.push(s1[p1-1]);
else break;
p1--;
p2--;
}
while(!ss.empty()){
printf("%c",ss.top());
ss.pop();
}
return 0;
}
/*
A B C D E
A 0 0 0 0 0 0
B 0 1 0 0 0 0
D 0 0 2 0 0 0
E 0 0 0 0 1 0
C 0 0 0 0 0 2
0 0 0 1 0 0
*/