/*
****************************************
Problem: Longest Common Subsequence
****************************************
Ashis Kumar Chanda
ID:   1624
CSE,  DU
****************************************
****************************************
*/
//  dynamic problem = DP

/* 	This code done for char LCS */

#include<stdio.h>
#include<string.h>

#define M 50

int c[M][M], b[M][M]={0};
char x[M], y[M];


void print( int i, int j)
{
	if( i==0 || j==0)
		return ;
	if( b[i][j]==3 )// get same char
	{
		print(i-1, j-1);
		printf("%c",x[i]);
	}
	else if( b[i][j]==2)
		print(i-1, j);
	else
		print(i, j-1);
}


int main()
{
	int i,j, m,n;
	char ch;
    //********* First String input ******
	i=1;
	x[0]='0';
	while( scanf("%c",&ch)!=EOF){
		if( ch==10 )break;
		x[i]=ch;
		i++;
	}
	x[i]=NULL;

	//********* Second String input ******
	i=1;
	y[0]='1';
	while( scanf("%c",&ch)!=EOF){
		if( ch==10 )break;
		y[i]=ch;
		i++;
	}
	y[i]=NULL;

	m= strlen(x);
	n= strlen(y);


	//************** LCS
	for(i=0;i<M ;i++)
		c[i][0]=0;

	for(i=0;i<M ;i++)
		c[0][i]=0;

	for( i=1; i< m; i++){//  must start from 1
		for( j=1; j< n; j++)
		{
			if( x[i]==y[j]){
				c[i][j]= c[i-1][j-1] +1;
				b[i][j]= 3;	// same , sign \\

			}
			else if (c[i-1][j] >= c[i][j-1] )
			{
				c[i][j]=c[i-1][j];
 			    b[i][j] = 2;// sign |
			}
			else{
				c[i][j]=c[i][j-1];
 			    b[i][j] = 1;  // sign <-
			}
		}
	}

	printf("\n output : ");
	// *********  Now print
	print(m-1, n-1);//  call by last cell index,  m is strlen

	printf("\n Lenght is : %d\n", c[m-1][n-1] );
	printf("\n\n	Thanks . . .\n\n");
	getchar();

	return 0;
}

