1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 #include <algorithm>
5 #include <string>
6 using namespace std;
7 #define N 1005
8 int dp[N+1][N+1];
9 int b[N+1][N+1];
10 char str1[N],str2[N];
11 void lcs(int len1,int len2)
12 {
13 for(int i=0;i<len1;i++){
14 for(int j=0;j<len2;j++){
15 if(str1[i]==str2[j]){
16 dp[i+1][j+1]=dp[i][j]+1;
17 b[i+1][j+1]=1;
18 }
19 else if(dp[i][j+1]>dp[i+1][j]){
20 dp[i+1][j+1]=dp[i][j+1];
21 b[i+1][j+1]=2;
22 }else{
23 dp[i+1][j+1]=dp[i+1][j];
24 b[i+1][j+1]=3;
25 }
26 }
27 }
28 cout<<dp[len1][len2]<<endl;
29 }
30 void printLcs(int i,int j)
31 {
32 if(i==0||j==0) return;
33 else if(b[i][j]==1){
34 printLcs(i-1,j-1);
35 cout<<str1[i-1];
36 }else if(b[i][j]==2) printLcs(i-1,j);
37 else printLcs(i,j-1);
38 }
39 int main()
40 {
41 while(cin>>str1>>str2){
42 memset(dp,0,sizeof(dp));
43 memset(b,0,sizeof(b));
44 int len1=strlen(str1);
45 int len2=strlen(str2);
46 lcs(len1,len2);//求解序列长度
47 printLcs(len1,len2);//打印序列
48 }
49 return 0;
50 }