#include<iostream>
using namespace std;
#define MAX 100
char x[MAX+1],y[MAX+1];
int b[MAX+1][MAX+1],c[MAX+1][MAX+1],m,n;
void LCSLength()
{int i,j;
for(i = 1; i <= m; i++)
c[i][0] = 0;
for(j = 1; j <= n; j++)
b[0][j] = 0;
for(i = 1; i <= m; i++)
for(j = 1; j <= n; j++) {
if(x[i] == y[j]){
c[i][j] = c[i-1][j-1] + 1;
b[i][j] = 1;
}
else if(c[i-1][j] >= c[i][j-1]){
c[i][j] = c[i-1][j];
b[i][j] = 2;
}
else{
c[i][j] = c[i][j-1];
b[i][j] = 3; }
}
cout<<"The lowest common subsequence length = "<<c[m][n]<<endl;
}
void LCS(int i,int j){
if(i == 0 || j == 0){
return;
}
if(b[i][j] == 1){
LCS(i-1,j-1);
cout<<x[i];
}
else if(b[i][j] == 2){
LCS(i-1,j);
}
else{
LCS(i,j-1);
}
}
int main (){
int i;
printf("Please input two sequence numbers length:");
cin>>m>>n;
getchar();
printf("Please input one sequence numbers :\n");
for(i = 1 ;i <= m; i++){
cin>>x[i];
}
getchar();
printf("Please input one sequence numbers :\n");
for (i = 1;i <= n ; i++){
cin>>y[i];
}
getchar();
LCSLength();
printf("The longest common subsequence is :\n");
LCS(m,n);
printf("\n");
getchar();
return 0;
}