#include#include #include using namespace std; int max(int a,int b) { return a>a?a:b; } char str1[110],str2[110]; int mark[110][110]; int deal(int i,int j) { if(i==0&&j==0) return 0; if(mark[i][j]==0) { deal(i-1,j-1); printf("%c",str1[i-1]); } else if(mark[i][j]==1) { deal(i-1,j); printf("%c",str1[i-1]); } else if(mark[i][j]==2) { deal(i,j-1); printf("%c",str2[j-1]); } return 0; } int main() { int i,j; int dp[110][110]; while(~scanf("%s%s",str1,str2)) { int len1=strlen(str1); int len2=strlen(str2); memset(dp,0,sizeof(dp)); for(i = 0;i<=len1;i++) mark[i][0] = 1; for(i = 0;i<=len2;i++) mark[0][i] = 2; for(i=1;i<=len1;i++) { for(j=1;j<=len2;j++) { if(str1[i-1]==str2[j-1]) { dp[i][j]=dp[i-1][j-1]+1; mark[i][j]=0; } else { //dp[i][j]=max(dp[i-1][j],dp[i][j-1]); if(dp[i-1][j]>=dp[i][j-1]) { dp[i][j]=dp[i-1][j]; mark[i][j]=1; } else { mark[i][j]=2; dp[i][j]=dp[i][j-1]; } } } } //printf("****\n"); deal(len1,len2); printf("\n"); } return 0; }