Problem:
Score : 100 points

Problem Statement

You are given strings s and t.
Find one longest string that is a subsequence of both s and t.

Notes

A subsequence of a string x is the string obtained by removing zero or more characters from x and concatenating the remaining characters without changing the order.

Constraints

s and t are strings consisting of lowercase English letters.

1 \leq |s|, |t| \leq 3000

Input

Input is given from Standard Input in the following format:

s
t

Output

Print one longest string that is a subsequence of both s and t.
If there are multiple such strings, any of them will be accepted.

Sample Input 1

axyb
abyxb

Sample Output 1

axb

The answer is axb or ayb; either will be accepted.

Sample Input 2

aa
xayaz

Sample Output 2

aa

Sample Input 3

a
z

Sample Output 3

The answer is (an empty string).

Sample Input 4

abracadabra
avadakedavra

Sample Output 4

aaadara

Solution in C (GCC 9.2.1) (judge verdict: Accepted)

#include<stdio.h>
#include<string.h>
int max(int i,int j,int l)
{
    int p=0;
    p=p>i?p:i;
    p=p>j?p:j;
    p=p>l?p:l;
    return p;
}
int min(int i,int j)
{
    return i>j?i:j;
}
int main()
{
    int n,m,i,j,k=0;
    char a[3000],b[3000],d[3000];
    scanf("%s %s",&a,&b);
    n=strlen(a);
    m=strlen(b);
    int c[n+1][m+1];
    for(i=0;i<n+1;i++)
        c[i][0]=0;
    for(i=0;i<m+1;i++)
        c[0][i]=0;
    for(i=1;i<n+1;i++)
    {
        for(j=1;j<m+1;j++)
        {
            if(a[i-1]==b[j-1])
                c[i][j]=max(c[i-1][j-1]+1,c[i-1][j],c[i][j-1]);
            else
                c[i][j]=min(c[i-1][j],c[i][j-1]);
        }
    }
    i=n;
    j=m;
    k=0;
    while(1)
    {
        if((i==0)||(j==0))
            break;
        if((a[i-1]==b[j-1])&&(c[i][j]==c[i-1][j-1]+1))
        {
            d[k]=a[i-1];
            k++;
            i--;
            j--;
        }
        else if(c[i][j]==c[i-1][j])
            i--;
        else
            j--;
    }
    k--;
    if(k==-1)
        printf(" ");
    else
    {
        for(i=k;i>=0;i--)
        printf("%c",d[i]);
    }
    return 0;
}