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 Common Lisp (SBCL 1.1.14) (judge verdict: Runtime Error)

(setq a (string (read)))
(setq al (concatenate 'list a))
(setq b (string (read)))
(setq bl (concatenate 'list b))

(setq n (length al))
(setq m (length bl))
(setq dp (make-array `(,(+ n 1) ,(+ m 1)) :initial-element nil))
(dotimes (i n)
  (dotimes (j m)
    (if (eq (elt al i) (elt bl j))
       (setf (aref dp (+ i 1) (+ j 1))
             (concatenate 'string (aref dp i j) (string (elt al i)))
             )
        (if (> (length (aref dp (+ i 1) j))
               (length (aref dp i (+ j 1)))
               )
            (setf (aref dp (+ i 1) (+ j 1))
                  (aref dp (+ i 1) j))
            (setf (aref dp (+ i 1) (+ j 1))
                  (aref dp i (+ j 1))
                  )
            )
        )
    ))
(format t (string-downcase (aref dp n m