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';
console.log(function(args){
  const tmp = args.trim().split('\n');
  const s = tmp[0], t = tmp[1];
  const sl = s.length, tl = t.length;
  const dp = [Array(tl+1).fill('')];
  for ( let i = 0; i < sl; i++ ) {
    dp.push(['']);
    for ( let j = 0; j < tl; j++ ) {
      dp[i+1].push('');
      if ( t[j] === s[i] ) dp[i+1][j+1] = dp[i][j] + s[i];
      if ( dp[i+1][j+1].length < dp[i+1][j].length ) dp[i+1][j+1] = dp[i+1][j];
      if ( dp[i+1][j+1].length < dp[i][j+1].length ) dp[i+1][j+1] = dp[i][j+1];
    }
  }
  return dp[sl][tl];
}(require('fs').readFileSync('/dev/stdin', 'utf8')));