import java.util.Scanner;
public class Test{
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
String s1=input.nextLine();
String s2=input.nextLine();
compare(s1,s2);
input.close();
}
public static void compare(String s1,String s2){
int m=s1.length();
int n=s2.length();
int c[][]=new int[m+1][n+1];
int d[][]=new int[m+1][n+1]; //新增数组用来记录c[i][j]前继节点
for(int i=0;i<m+1;i++){ //0表示没有 1表示左边
c[i][0]=0; //2表示斜上方,3表示正上方
d[i][0]=0;
}
for(int j=0;j<n+1;j++){
c[0][j]=0;
d[0][j]=0;
}
for(int i=1;i<m+1;i++){
for(int j=1;j<n+1;j++){
if(s1.charAt(i-1)==s2.charAt(j-1)){
c[i][j]=c[i-1][j-1]+1;
d[i][j]=2;
}else{
if(c[i-1][j]>c[i][j-1]){
d[i][j]=1;
c[i][j]=c[i-1][j];
}else{
d[i][j]=3;
c[i][j]=c[i][j-1];
}
}
}
}
print(s1,d,m,n);
}
public static void print(String s,int[][] d,int m,int n){
if((m==0&&n==0)||d[m][n]==0)
return;
if(d[m][n]==1){
print(s,d,m-1,n);
}else if(d[m][n]==3){
print(s,d,m,n-1);
}else{
print(s,d,m-1,n-1);
System.out.print(s.charAt(m-1));
}
}
/**
* 不用额外开辟空间输出公共子串的方法
* @param c
* @param s1
* @param s2
* @param m
* @param n
*/
// public static void fun(int[][] c,String s1,String s2,int m,int n){
// if((m==0&&n==0)||c[m][n]==0)
// {
// return;
// }
// if(s1.charAt(m-1)==s2.charAt(n-1)){
// fun(c,s1,s2,m-1,n-1);
// System.out.print(s1.charAt(m-1));
// }else if(c[m][n]==c[m-1][n]){
// fun(c,s1,s2,m-1,n);
// }else{
// fun(c,s1,s2,m,n-1);
// }
// }
}