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 Lua (LuaJIT 2.1.0) (judge verdict: Accepted)

local s=io.read()
local t=io.read()
local n=#s
local m=#t

local dp={}
for i=1,n+1 do
    dp[i]={}
    for j=1,m+1 do
        dp[i][j]=0
    end
end

for i=1,n do
    for j=1,m do
        if s:byte(i)==t:byte(j) then
            dp[i+1][j+1]=math.max(dp[i][j]+1,dp[i+1][j],dp[i][j+1])
        else
            dp[i+1][j+1]=math.max(dp[i+1][j],dp[i][j+1])
        end
    end
end

local length=dp[n+1][m+1]
local answer={}
while length>0 do
    if s:byte(n)==t:byte(m) then
        answer[length]=s:sub(n,n)
        n=n-1
        m=m-1
        length=length-1
    elseif dp[n+1][m+1]==dp[n][m+1] then
        n=n-1
    else
        m=m-1
    end
end
print(table.concat(answer))