fun main(args: Array<String>) {
    edpf()
}

private enum class From { LEFT, LEFT_ABOVE, ABOVE, UNDEFINED }

fun edpf() {
    val s = readLine()!!
    val t = readLine()!!

    // sをiまで、tをjまで選んだときのLCSテーブル
    val dp = Array(s.length + 1) { IntArray(t.length + 1) { 0 } }
    // dpテーブルでどの方向から遷移してきたか (縦軸s、横軸tとする)
    val from = Array(s.length + 1) {
        Array(t.length + 1) {
            From.UNDEFINED
        }
    }

    // LCSの遷移を記録
    for (i in 1..s.length) {
        for (j in 1..t.length) {
            dp[i][j] = if (s[i - 1] == t[j - 1]) {
                from[i][j] = From.LEFT_ABOVE
                dp[i - 1][j - 1] + 1
            } else {
                if (dp[i - 1][j] > dp[i][j - 1]) {
                    from[i][j] = From.ABOVE
                    dp[i - 1][j]
                } else {
                    from[i][j] = From.LEFT
                    dp[i][j - 1]
                }
            }
        }
    }

    val answer = StringBuffer()

    // LCSの復元
    var si = s.length
    var ti = t.length
    while (si > 0 && ti > 0) {
        when (from[si][ti]) {
            From.LEFT_ABOVE -> {
                answer.append(s[si - 1])
                si--
                ti--
            }
            From.ABOVE -> si--
            From.LEFT -> ti--
            else -> Unit
        }
    }

    println(answer.reverse())
}
