#include using namespace std; int main() { int n, m; cin >> n >> m; string s1, s2; cin >> s1 >> s2; /* let dp[i][j] represent the length of the longest common subsequence using the first i characters of s1 and the first j characters of s2 if s1[i] == s2[j] dp[i][j] = dp[i - 1][j - 1] + 1 else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) */ vector> dp(n + 1, vector(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] = 1 + dp[i - 1][j - 1]; } else { dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]); } } } int row = n, col = m; string sub = ""; while (dp[row][col]) { if (s1[row - 1] == s2[col - 1]) { sub = string(1, s1[row - 1]) + sub; row--, col--; } else if (dp[row - 1][col] > dp[row][col - 1]) { row--; } else { col--; } } int size = dp[n][m]; cout << size << endl; cout << sub << endl; return 0; }