#include <stdio.h> #include <string.h> static const int MAX = 100; char str1[MAX], str2[MAX], str3[MAX]; int c[MAX][MAX], f[MAX][MAX]; inline int max(int a, int b) { return a>b ? a : b; } int dp(int i, int j) { if (c[i][j] == -1) { if (i==0 || j==0) { c[i][j] = 0; } else if (str1[i-1] == str2[j-1]) { c[i][j] = dp(i-1, j-1) + 1; f[i][j] = 1; } else { if (dp(i, j-1) > dp(i-1, j)) { c[i][j] = dp(i, j-1); f[i][j] = 2; } else { c[i][j] = dp(i-1, j); f[i][j] = 3; } } } return c[i][j]; } void fill(int i, int j, int len) { if (len < 0) { return; } if (f[i][j] == 1) { str3[len] = str1[i-1]; fill(i-1, j-1, len-1); } else if (f[i][j] == 2) { fill(i, j-1, len); } else if (f[i][j] == 3) { fill(i-1, j, len); } } int main() { while (1) { memset(c, -1, sizeof(c)); memset(f, 0, sizeof(f)); scanf("%s%s", str1, str2); int len = dp(strlen(str1), strlen(str2)); str3[len] = 0; fill(strlen(str1), strlen(str2), len-1); printf("%s\n", str3); } return 0; }