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 JavaScript (node.js v5.12) (judge verdict: Time Limit Exceeded)

'use strict'

function solve(S, T) {
  var dp = new Array(S.length + 1).fill(0).map(e => new Array(T.length + 1).fill([0, '']))
  for (var i = 1; i <= S.length; i++) {
    for (var j = 1; j <= T.length; j++) {
      if (S[i-1] === T[j-1]) {
        dp[i][j] = [1 + dp[i-1][j-1][0], dp[i-1][j-1][1] + S[i-1]]
      } else {
        var val = dp[i][j-1][0] > dp[i-1][j][0] ? dp[i][j-1][0] : dp[i-1][j][0]
        var s = dp[i][j-1][0] > dp[i-1][j][0] ? dp[i][j-1][1] : dp[i-1][j][1]
        dp[i][j] = [val, s]
      }
    }
  }
  return dp[S.length][T.length][1]
}

function main(input) {
  var lines = input.split("\n")
  var S = lines[0]
  var T = lines[1]
  var ans = solve(S,T)
  console.log(ans)
}

main(require('fs').readFileSync('/dev/stdin', 'utf8'));