#include<stdio.h>
#define m 7
#define n 6
int c[m + 1][n + 1];
int b[m+1][n+1];
void LCS_LENGTH(char *x,char *y)
{
int i,j;
for (i = 0; i <= m; i++)
c[i][0] = 0;
for (j = 0; j <= n; j++)
c[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;
}
}
}
}
int PRINT_LCS(int b[][n+1], char *x, int i, int j)
{
if (i == 0 || j == 0)
return 0;
if (b[i][j] == -1)
{
PRINT_LCS(b, x, i - 1, j - 1);
printf("%c ", x[i]);
}
else if (b[i][j] == -2)
PRINT_LCS(b, x, i - 1, j);
else
PRINT_LCS(b, x, i, j - 1);
}
int main()
{
char x[8] = { NULL,'A','B','C','B','D','A','B'};
char y[7] = {NULL, 'B','D','C','A','B','A' };
LCS_LENGTH(x, y);
PRINT_LCS(b, x, 7, 6);
return 0;
}