//Accepted 208K 0MS //dp //最长公共子序列+路径 #include <cstdio> #include <cstring> #include <iostream> using namespace std; ; ; int dp[imax_n][imax_n]; char s1[imax_n],s2[imax_n]; int l1,l2; int max(int a,int b) { return a>b?a:b; } void Dp() { memset(dp,,sizeof(dp)); ;i<=l1;i++) { ;j<=l2;j++) { //dp[i][j]=inf; dp[i][j]=max(dp[i-][j],dp[i][j-]); ]==s2[j-]) dp[i][j]=max(dp[i][j],dp[i-][j-]+); } } //printf("%d\n",dp[l1][l2]); } void output(int i,int j) { ) { ;k<=i;k++) printf(]); ;k<=j;k++) printf(]); return ; } ][j-]+ && s1[i-]==s2[j-]) { output(i-,j-); printf(]); return ; } ][j]) { output(i-,j); printf(]); return ; } ]) { output(i,j-); printf(]); return ; } } int main() { while (scanf("%s%s",s1,s2)!=EOF) { l1=strlen(s1); l2=strlen(s2); Dp(); output(l1,l2); printf("\n"); } ; }