28 lines
618 B
Python
28 lines
618 B
Python
s1, s2 = input(), input()
|
|
l1, l2 = len(s1), len(s2)
|
|
dp = [[0]*(l2+1) for _ in range(l1+1)]
|
|
|
|
for i in range(l1) :
|
|
for j in range(l2) :
|
|
if s1[i] == s2[j] :
|
|
dp[i+1][j+1] = dp[i][j] + 1
|
|
else :
|
|
dp[i+1][j+1] = max(dp[i+1][j], dp[i][j+1])
|
|
|
|
print(dp[l1][l2])
|
|
|
|
if dp[l1][l2] != 0 :
|
|
ans = []
|
|
p1, p2 = l1, l2
|
|
|
|
while p1 > 0 and p2 > 0 :
|
|
if dp[p1][p2-1] == dp[p1][p2] :
|
|
p2 -= 1
|
|
elif dp[p1-1][p2] == dp[p1][p2] :
|
|
p1 -= 1
|
|
else :
|
|
ans.append(s2[p2-1])
|
|
p1, p2 = p1-1, p2-1
|
|
|
|
print("".join(ans[::-1]))
|