Buggy python submission (verdict: Time Limit Exceeded):
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+2) for i in range(LS+2)]
for i in range(LS-1, -1, -1):
    X = dp[i]; Y = dp[i+1]; si = S[i]
    r = X[LT]
    for j in range(LT-1, -1, -1):
        X[j] = r = max(Y[j+1] + 1, Y[j], r) if si == T[j] else max(Y[j], r)
i = j = 0
ans = []
X = dp[0]; Y = dp[1]
while i < LS and j < LT:
    if S[i] == T[j] and X[j] == Y[j+1] + 1:
        ans.append(S[i])
        i += 1; j += 1
        X = Y; Y = dp[i+1]
    elif X[j] == Y[j]:
        i += 1
        X = Y; Y = dp[i+1]
    else:
        j += 1
print(*map(chr, ans), sep='')

Fixed submission:
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        if S[i] == T[j]:
            dp[i][j] = max(dp[i+1][j+1] + 1, dp[i+1][j], dp[i][j+1])
        else:
            dp[i][j] = max(dp[i+1][j], dp[i][j+1])
i = j = 0
ans = []
while i < LS and j < LT:
    if S[i] == T[j]:
        if dp[i][j] == dp[i+1][j+1] + 1:
            ans.append(S[i])
            i += 1; j += 1
        elif dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
    else:
        if dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
print(*map(chr, ans), sep='')

Buggy python submission (verdict: Time Limit Exceeded):
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
nxt = [[(0, None, None)]*(LT+1) for i in range(LS+1)]
P = [[None]*(LT+1) for i in range(LS+1)]
Q = [[None]*(LT+1) for i in range(LS+1)]
R = [[0]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        r0 = dp[i+1][j]; r1 = dp[i][j+1]
        r = max(r0, r1)
        if r0 < r1:
            rr = 0; p0 = i; q0 = j+1
        else:
            rr = 0; p0 = i+1; q0 = j
        if S[i] == T[j]:
            r2 = dp[i+1][j+1] + 1
            if r < r2:
                r = r2
                rr = 1; p0 = i+1; q0 = j+1
        dp[i][j] = r
        R[i][j] = rr
        P[i][j] = p0; Q[i][j] = q0

i = j = 0
ans = []
while i is not None:
    if R[i][j]:
        ans.append(S[i])
    i, j = P[i][j], Q[i][j]
print(*map(chr, ans), sep='')

Fixed submission:
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        if S[i] == T[j]:
            dp[i][j] = max(dp[i+1][j+1] + 1, dp[i+1][j], dp[i][j+1])
        else:
            dp[i][j] = max(dp[i+1][j], dp[i][j+1])
i = j = 0
ans = []
while i < LS and j < LT:
    if S[i] == T[j]:
        if dp[i][j] == dp[i+1][j+1] + 1:
            ans.append(S[i])
            i += 1; j += 1
        elif dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
    else:
        if dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
print(*map(chr, ans), sep='')

Buggy python submission (verdict: Time Limit Exceeded):
S = input()
T = input()
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
nxt = [[(0, None, None)]*(LT+1) for i in range(LS+1)]
P = [[None]*(LT+1) for i in range(LS+1)]
Q = [[None]*(LT+1) for i in range(LS+1)]
R = [[0]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        r0 = dp[i+1][j]; r1 = dp[i][j+1]
        r = max(r0, r1)
        if r0 < r1:
            rr = 0; p0 = i; q0 = j+1
        else:
            rr = 0; p0 = i+1; q0 = j
        if S[i] == T[j]:
            r2 = dp[i+1][j+1] + 1
            if r < r2:
                r = r2
                rr = 1; p0 = i+1; q0 = j+1
        dp[i][j] = r
        R[i][j] = rr
        P[i][j] = p0; Q[i][j] = q0

i = j = 0
ans = []
while i is not None:
    if R[i][j]:
        ans.append(S[i])
    i, j = P[i][j], Q[i][j]
print(*ans, sep='')

Fixed submission:
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        if S[i] == T[j]:
            dp[i][j] = max(dp[i+1][j+1] + 1, dp[i+1][j], dp[i][j+1])
        else:
            dp[i][j] = max(dp[i+1][j], dp[i][j+1])
i = j = 0
ans = []
while i < LS and j < LT:
    if S[i] == T[j]:
        if dp[i][j] == dp[i+1][j+1] + 1:
            ans.append(S[i])
            i += 1; j += 1
        elif dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
    else:
        if dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
print(*map(chr, ans), sep='')

Buggy python submission (verdict: Time Limit Exceeded):
S = input()
T = input()
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
nxt = [[(0, None, None)]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        r0 = dp[i+1][j]; r1 = dp[i][j+1]
        r = max(r0, r1)
        x = (0, i, j+1) if r0 < r1 else (0, i+1, j)
        if S[i] == T[j]:
            r2 = dp[i+1][j+1] + 1
            if r < r2:
                r = r2
                x = (1, i+1, j+1)
        dp[i][j] = r
        nxt[i][j] = x

i = j = 0
ans = []
while i is not None:
    m, i0, j = nxt[i][j]
    if m:
        ans.append(S[i])
    i = i0
print(*ans, sep='')

Fixed submission:
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        if S[i] == T[j]:
            dp[i][j] = max(dp[i+1][j+1] + 1, dp[i+1][j], dp[i][j+1])
        else:
            dp[i][j] = max(dp[i+1][j], dp[i][j+1])
i = j = 0
ans = []
while i < LS and j < LT:
    if S[i] == T[j]:
        if dp[i][j] == dp[i+1][j+1] + 1:
            ans.append(S[i])
            i += 1; j += 1
        elif dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
    else:
        if dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
print(*map(chr, ans), sep='')

Buggy python submission (verdict: Time Limit Exceeded):
import sys
sys.setrecursionlimit(10**5)

S = input()
T = input()
LS = len(S); LT = len(T)

memo = [[-1]*LT for i in range(LS)]
nxt = [[(0, None, None)]*(LT+1) for i in range(LS+1)]
def dfs(i, j):
    if i == LS or j == LT:
        return 0
    if memo[i][j] != -1:
        return memo[i][j]
    r0 = dfs(i+1, j); r1 = dfs(i, j+1)
    r = max(r0, r1)
    x = (0, i, j+1) if r0 < r1 else (0, i+1, j)
    if S[i] == T[j]:
        r2 = dfs(i+1, j+1) + 1
        if r < r2:
            r = r2
            x = (1, i+1, j+1)
    memo[i][j] = r
    nxt[i][j] = x
    return r

dfs(0, 0)
i = j = 0
ans = []
while i is not None:
    m, i0, j = nxt[i][j]
    if m:
        ans.append(S[i])
    i = i0
print(*ans, sep='')

Fixed submission:
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        if S[i] == T[j]:
            dp[i][j] = max(dp[i+1][j+1] + 1, dp[i+1][j], dp[i][j+1])
        else:
            dp[i][j] = max(dp[i+1][j], dp[i][j+1])
i = j = 0
ans = []
while i < LS and j < LT:
    if S[i] == T[j]:
        if dp[i][j] == dp[i+1][j+1] + 1:
            ans.append(S[i])
            i += 1; j += 1
        elif dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
    else:
        if dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
print(*map(chr, ans), sep='')

Buggy python submission (verdict: Runtime Error):
S = input()
T = input()
LS = len(S); LT = len(T)

memo = [[-1]*LT for i in range(LS)]
nxt = [[(0, None, None)]*(LT+1) for i in range(LS+1)]
def dfs(i, j):
    if i == LS or j == LT:
        return 0
    if memo[i][j] != -1:
        return memo[i][j]
    r0 = dfs(i+1, j); r1 = dfs(i, j+1)
    r = max(r0, r1)
    x = (0, i, j+1) if r0 < r1 else (0, i+1, j)
    if S[i] == T[j]:
        r2 = dfs(i+1, j+1) + 1
        if r < r2:
            r = r2
            x = (1, i+1, j+1)
    memo[i][j] = r
    nxt[i][j] = x
    return r

dfs(0, 0)
i = j = 0
ans = []
while i is not None:
    m, i0, j = nxt[i][j]
    if m:
        ans.append(S[i])
    i = i0
print(*ans, sep='')

Fixed submission:
*S, = map(ord, input())
*T, = map(ord, input())
LS = len(S); LT = len(T)

dp = [[-1]*(LT+1) for i in range(LS+1)]
for i in range(LS-1, -1, -1):
    for j in range(LT-1, -1, -1):
        if S[i] == T[j]:
            dp[i][j] = max(dp[i+1][j+1] + 1, dp[i+1][j], dp[i][j+1])
        else:
            dp[i][j] = max(dp[i+1][j], dp[i][j+1])
i = j = 0
ans = []
while i < LS and j < LT:
    if S[i] == T[j]:
        if dp[i][j] == dp[i+1][j+1] + 1:
            ans.append(S[i])
            i += 1; j += 1
        elif dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
    else:
        if dp[i][j] == dp[i+1][j]:
            i += 1
        else:
            j += 1
print(*map(chr, ans), sep='')