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 Pascal (FPC 2.6.2) (judge verdict: Accepted)

var dp, back: array[0..5000, 0..5000] of longint;
    c: array[1..3000] of char;
    s, t: ansistring;
    i,j,k: longint;
begin
    readln(s);
    readln(t);
    for i:=1 to length(s) do 
    begin
        for j:=1 to length(t) do
        begin
            if s[i]=t[j] then
            begin
                dp[i,j]:=dp[i-1][j-1]+1;
                back[i,j]:=0;
            end
            else
            begin
                if dp[i,j-1]>dp[i-1,j] then
                begin
                    dp[i,j]:=dp[i,j-1];
                    back[i,j]:=1;
                end
                else
                begin
                    dp[i,j]:=dp[i-1,j];
                    back[i,j]:=2;
                end;
            end;
        end;
    end;
    k:=0;
    while k<dp[length(s),length(t)] do
    begin
        if back[i,j]=2 then
            dec(i)
        else if back[i,j]=1 then
            dec(j)
        else
        begin
            inc(k);
            c[k]:=s[i];
            dec(i);
            dec(j);
        end;
    end;
    for i:=k downto 1 do
        write(c[i]);
    writeln;
end.