#include <iostream>
#include <vector>
#include <string>
using namespace std;
int lcs(string s1, string s2) {
int n = s1.size(), m = s2.size();
vector<vector<int>> dp(n+1, vector<int>(m+1, 0));
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (s1[i-1] == s2[j-1])
dp[i][j] = dp[i-1][j-1] + 1;
else
dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[n][m];
}
int main() {
string s1 = "ABCBDAB", s2 = "BDCABA";
cout << "Length of LCS: " << lcs(s1, s2) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGxjcyhzdHJpbmcgczEsIHN0cmluZyBzMikgewogICAgaW50IG4gPSBzMS5zaXplKCksIG0gPSBzMi5zaXplKCk7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGRwKG4rMSwgdmVjdG9yPGludD4obSsxLCAwKSk7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbjsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbTsgaisrKSB7CiAgICAgICAgICAgIGlmIChzMVtpLTFdID09IHMyW2otMV0pCiAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IGRwW2ktMV1bai0xXSArIDE7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGRwW2ldW2pdID0gbWF4KGRwW2ktMV1bal0sIGRwW2ldW2otMV0pOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBkcFtuXVttXTsKfQoKaW50IG1haW4oKSB7CiAgICBzdHJpbmcgczEgPSAiQUJDQkRBQiIsIHMyID0gIkJEQ0FCQSI7CiAgICBjb3V0IDw8ICJMZW5ndGggb2YgTENTOiAiIDw8IGxjcyhzMSwgczIpIDw8IGVuZGw7CiAgICByZXR1cm4gMDsKfQo=