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)



function Main(input) {
  input = input.split("\n");
  var s = input[0].split("");
  var t = input[1].split("");
  var M = [[-1]];
  var L = new Array();
  var maxj=0;
  var max=0;
  for(var i=0;i<t.length;i++){
    for(var j=0;j<M.length;j++){
      for(var k=M[j][M[j].length-1]+1;k<=s.length;k++){
        if(t[i]==s[k]){
          M.push([...M[j],k]);
          if(M[M.length-1].length>max){
            maxj=M.length-1;
            max=M[M.length-1].length;
          }
          break;
        }
      }
    }
  }
  var ans="";
  for(var i=1;i<max;i++){
    ans+=s[M[maxj][i]];
  }


  console.log('%s', ans);
  return ans;
}
// "実行する"ボタンを押した時に実行される関数 (デバッグ用)
function debug(n){
  var input = document.getElementById("input"+n).value;
  var ans=Main(input);
  var result="WA";
  if(ans==document.getElementById("output"+n).value.split("\n")[0]){
    result="AC";
  }
  document.getElementById("result"+n).innerHTML=result;
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));