#include<bits/stdc++.h>
using namespace std;
string longestCommonSubsequence(const string& X, const string& Y) {
int m = X.size();
int n = Y.size();
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (X[i - 1] == Y[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
string lcs;
int i = m, j = n;
while (i > 0 && j > 0) {
if (X[i - 1] == Y[j - 1]) {
lcs += X[i - 1];
--i;
--j;
} else if (dp[i - 1][j] > dp[i][j - 1]) {
--i;
} else {
--j;
}
}
reverse(lcs.begin(), lcs.end());
return lcs;
}
int main() {
string X, Y;
cout << "Enter first string: ";
cin >> X;
cout << "Enter second string: ";
cin >> Y;
string lcs = longestCommonSubsequence(X, Y);
cout << "Length of LCS: " << lcs.length() << endl;
cout << "LCS: " << lcs << endl;
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RyaW5nIGxvbmdlc3RDb21tb25TdWJzZXF1ZW5jZShjb25zdCBzdHJpbmcmIFgsIGNvbnN0IHN0cmluZyYgWSkgewogICAgaW50IG0gPSBYLnNpemUoKTsKICAgIGludCBuID0gWS5zaXplKCk7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IGRwKG0gKyAxLCB2ZWN0b3I8aW50PihuICsgMSwgMCkpOwogICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gbTsgaSsrKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDE7IGogPD0gbjsgaisrKSB7CiAgICAgICAgICAgIGlmIChYW2kgLSAxXSA9PSBZW2ogLSAxXSkgewogICAgICAgICAgICAgICAgZHBbaV1bal0gPSBkcFtpIC0gMV1baiAtIDFdICsgMTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRwW2ldW2pdID0gbWF4KGRwW2kgLSAxXVtqXSwgZHBbaV1baiAtIDFdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgIHN0cmluZyBsY3M7CiAgICBpbnQgaSA9IG0sIGogPSBuOwogICAgd2hpbGUgKGkgPiAwICYmIGogPiAwKSB7CiAgICAgICAgaWYgKFhbaSAtIDFdID09IFlbaiAtIDFdKSB7CiAgICAgICAgICAgIGxjcyArPSBYW2kgLSAxXTsKICAgICAgICAgICAgLS1pOwogICAgICAgICAgICAtLWo7CiAgICAgICAgfSBlbHNlIGlmIChkcFtpIC0gMV1bal0gPiBkcFtpXVtqIC0gMV0pIHsKICAgICAgICAgICAgLS1pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC0tajsKICAgICAgICB9CiAgICB9CgogICAgcmV2ZXJzZShsY3MuYmVnaW4oKSwgbGNzLmVuZCgpKTsKICAgIHJldHVybiBsY3M7Cn0KCmludCBtYWluKCkgewogICAgc3RyaW5nIFgsIFk7CiAgICBjb3V0IDw8ICJFbnRlciBmaXJzdCBzdHJpbmc6ICI7CiAgICBjaW4gPj4gWDsKICAgIGNvdXQgPDwgIkVudGVyIHNlY29uZCBzdHJpbmc6ICI7CiAgICBjaW4gPj4gWTsKCiAgICBzdHJpbmcgbGNzID0gbG9uZ2VzdENvbW1vblN1YnNlcXVlbmNlKFgsIFkpOwogICAgY291dCA8PCAiTGVuZ3RoIG9mIExDUzogIiA8PCBsY3MubGVuZ3RoKCkgPDwgZW5kbDsKICAgIGNvdXQgPDwgIkxDUzogIiA8PCBsY3MgPDwgZW5kbDsKCiAgICByZXR1cm4gMDsKfQo=