#include #include using namespace std; char a[105][35],b[105][35];//二维数组,每一个是个字符串 int dp[105][105],c[105][105]; void lcs(int len1,int len2){ for(int i=1;i<=len1;i++){ for(int j=1;j<=len2;j++){ if(strcmp(a[i-1],b[j-1])==0){ dp[i][j]=dp[i-1][j-1]+1; c[i][j]=1; } else{ if(dp[i][j-1]>=dp[i-1][j]){ dp[i][j]=dp[i][j-1]; c[i][j]=2; } else{ dp[i][j]=dp[i-1][j]; c[i][j]=3; } } } } } void dfs(int i,int j){ if(i==0||j==0) return; if(c[i][j]==1){ dfs(i-1,j-1); printf("%s ",a[i-1]); } else if(c[i][j]==2) dfs(i,j-1); else dfs(i-1,j); } int main(){ while(~scanf("%s",a[0])){ int len1=1; while(strcmp(a[len1-1],"#")) scanf("%s",a[len1++]); len1--; scanf("%s",b[0]); int len2=1; while(strcmp(b[len2-1],"#")) scanf("%s",b[len2++]); len2--; memset(dp,0,sizeof(dp)); lcs(len1,len2); dfs(len1,len2); printf("\n"); } return 0; }