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 Go (1.6) (judge verdict: Wrong Answer)

package main

import (
	"bufio"
	"fmt"
	"os"
)

func out(x ...interface{}) {
	fmt.Println(x...)
}

func max(a, b int) int {
	if a > b {
		return a
	}
	return b
}

func main() {
	r := bufio.NewReaderSize(os.Stdin, 4000)

	s, _, _ := r.ReadLine()
	t, _, _ := r.ReadLine()

	var dp [3001][3001]int

	n := len(s)
	m := len(t)
	for i := 1; i <= n; i++ {
		for j := 1; j <= m; j++ {
			if s[i-1] == t[j-1] {
				dp[i][j] = dp[i-1][j-1] + 1
			} else {
				dp[i][j] = max(dp[i-1][j], dp[i][j-1])
			}
		}
	}

	//	out(dp[n][m])

	val := dp[n][m]
	p0 := n
	p1 := m
	ans := ""
	for {
		if val == 0 {
			break
		}
		if dp[p0-1][p1] == val {
			p0--
		} else if dp[p0][p1-1] == val {
			p1--
		} else {
			ans = ans + string(s[p0-1])
			val--
			p0--
			p1--
		}
	}

	for i := len(ans); i > 0; i-- {
		fmt.Print(string(ans[i-1]))
	}
	fmt.Println("")

}