LCS...
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int const MAXN = 1000;
char s1[MAXN],s2[MAXN];
int dp[MAXN][MAXN];
inline int Max(int a,int b){
return a>b?a:b;
}
int main(){
while(cin>>s1>>s2){
memset(dp,0,sizeof(dp));
int l1 = strlen(s1);
for(int i = l1;i >= 1;i--){
s1[i] = s1[i - 1];
}
int l2 = strlen(s2);
for(int i = l2;i >= 1;i--){
s2[i] = s2[i - 1];
}
for(int i = 1;s1[i];i++){
for(int j = 1;s2[j];j++){
if(s1[i] == s2[j]) dp[i][j] = Max(dp[i][j],dp[i - 1][j - 1] + 1);
else dp[i][j] = Max(dp[i - 1][j],dp[i][j - 1]);
}
}
printf("%d\n",dp[l1][l2]);
}
return 0;
}