#include #include #include #include #include #include #include #include #include using namespace std; #define REP(i,n) for (int i=0; i=0; i--) #define pb push_back #define fi first #define se second typedef long long ll; typedef pair pi; int m[2001][2001]; int main(){ while(1) { vector va,vb; char p[100]; while(1) { scanf("%s",p); if(p[0]=='.') break; va.push_back(p); } if(va.size()==0) break; while(1) { scanf("%s",p); if(p[0]=='.') break; vb.push_back(p); } REP(i,va.size()) m[i][vb.size()]=0; REP(i,vb.size()) m[va.size()][i]=0; for(int i=va.size()-1;i>=0;--i) for(int j=vb.size()-1;j>=0;--j) { m[i][j]=0; if(m[i+1][j]>m[i][j]) m[i][j]=m[i+1][j]; if(m[i][j+1]>m[i][j]) m[i][j]=m[i][j+1]; if(va[i]==vb[j] && 1+m[i+1][j+1]>m[i][j] ) m[i][j]=m[i+1][j+1]+1; } int i=0,j=0; while(i<(int)va.size() || j<(int)vb.size()) { if(i+j) printf(" "); if(j==(int)vb.size() ) { printf("%s",va[i++].c_str()); } else if(i==(int)va.size() ) { printf("%s",vb[j++].c_str()); } else if(va[i]==vb[j]) { printf("%s",va[i].c_str()); i++;j++; } else if(m[i+1][j]>m[i][j+1]) { printf("%s",va[i++].c_str()); } else if(m[i+1][j]vb[j]) { printf("%s",vb[j++].c_str()); } } printf(" .\n"); } }