//package Qf
import java.util.*
import java.math.*
import java.lang.Math.*

private val readString: ()->String = {readLine()!!}
private val readInt: ()->Int = {readLine()!!.toInt()}
private val readLong: ()->Long = {readLine()!!.toLong()}
private val readIntArray: ()->IntArray = {readLine()!!.split(' ').map{it.toInt()}.toIntArray()}
private val readLongArray: ()->LongArray = {readLine()!!.split(' ').map{it.toLong()}.toLongArray()}
private val errPrintln: (String)->Unit = {msg -> System.err.println(msg)}
private val MOD = 1e9.toLong()+7
private val INF = Int.MAX_VALUE/2
private val LINF = Long.MAX_VALUE/2


fun solveF(S: String, T: String): String {
    val N = S.length
    val M = T.length
    val dp = Array(N+1){IntArray(M+1){0}}

    for(i in 0 until N) {
        for (j in 0 until M) {
            if (T[j] == S[i]) {
                dp[i+1][j+1] = dp[i][j] + 1
            } else {
                if (dp[i][j+1] >= dp[i+1][j]) {
                    dp[i+1][j+1] = dp[i][j+1]
                } else {
                    dp[i+1][j+1] = dp[i+1][j]
                }
            }
        }
    }

    var i = N
    var j = M
    var res = ""
    while (0<i && 0<j) {
        if (dp[i][j] == dp[i-1][j]+1 && dp[i][j] == dp[i][j-1]+1) {
            res += S[i-1]
            i--
            j--
        } else if (dp[i][j] == dp[i-1][j]) {
            i--
        } else if (dp[i][j] == dp[i][j-1]) {
            j--
        }
    }

    return res.reversed()
}


fun main(args: Array<String>) {
    val S = readString()
    val T = readString()

    val ans = solveF(S, T)

    println(ans)
}
