s = 'AXXXA'
n = len(s)
dp = [[('', 0, 0) for i in range(n + 1)] for j in range(n + 1)]
for i in range(1, n + 1):
for j in range(1, n + 1):
last = dp[i - 1][j - 1]
if last[2] != i != j != last[1] and s[i - 1] == s[j - 1]:
dp[i][j] = last[0] + s[i - 1], i, j
else:
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1], key=lambda t: t[0])
print(dp[n][n][0])
cyA9ICdBWFhYQScKbiA9IGxlbihzKQpkcCA9IFtbKCcnLCAwLCAwKSBmb3IgaSBpbiByYW5nZShuICsgMSldIGZvciBqIGluIHJhbmdlKG4gKyAxKV0KCmZvciBpIGluIHJhbmdlKDEsIG4gKyAxKToKICAgIGZvciBqIGluIHJhbmdlKDEsIG4gKyAxKToKICAgICAgICBsYXN0ID0gZHBbaSAtIDFdW2ogLSAxXQogICAgICAgIGlmIGxhc3RbMl0gIT0gaSAhPSBqICE9IGxhc3RbMV0gYW5kIHNbaSAtIDFdID09IHNbaiAtIDFdOgogICAgICAgICAgICBkcFtpXVtqXSA9IGxhc3RbMF0gKyBzW2kgLSAxXSwgaSwgagogICAgICAgIGVsc2U6CiAgICAgICAgICAgIGRwW2ldW2pdID0gbWF4KGRwW2kgLSAxXVtqXSwgZHBbaV1baiAtIDFdLCBrZXk9bGFtYmRhIHQ6IHRbMF0pCgpwcmludChkcFtuXVtuXVswXSk=