while True: 
    try:


        a=input()
        b=input()
        m = a if len(a)<len(b) else b # m 是短的字符,它的长度为下面的lm,将充当bp二维list的行数
        n = b if len(a)<len(b) else a # n 是短的字符,它的长度为下面的ln,将充当bp二维list的列数
        lm = len(m)
        ln = len(n)
        bp= [ [0]*(ln+1) for _ in range(lm+1) ]

        max_len = 0 # substring的长度初始为0
        end_idx = 0 # substring的末尾字符,在较短的字符串m中index值

        for i in range(lm): # 对短字符中的每一个index,实际上等于二维bp表的行维度向下遍历
            for j in range(ln): # 对长字符中的每一个index,实际上等于二维bp表的列维度向右边遍历
                if m[i] == n[j]: # 如果对应字符串中的字符是一样的
                    bp[i+1][j+1] = bp[i][j]+1 # 那么对于表中 [i+1][j+1]位置填充入它左上角值+1
                    if bp[i+1][j+1]>max_len: # 每次填充完都去判断是否刷新了最长的substring长度
                        max_len = bp[i+1][j+1] # 若刷新了,则将刷新的更新至max_len
                        end_idx = i # 同时,记录一下此时遍历的i的值,赋给end_idx

        print( m[ end_idx+1-max_len : end_idx+1 ]  ) # 输出结果,如 apple中的pple,长度为4,末尾的index在apple中为4,我们知道当slicing一个list的时候是左闭右开的,所以我们如果要最后能够取到index为4的元素,我们右边必须用5,扣除长度4,那么结果就是 'apple'[5-4,5],或者说 'apple'[4+1-4,4+1]
    except:
        break