#include<iostream> #include<string> #include<algorithm> using namespace std; const int MAXN = 120; int dp_data[MAXN][MAXN]; string a_str, b_str; void initConfig() { for (int i = 0; i < MAXN; i++) { for (int j = 0; j < MAXN; j++) { dp_data[i][j] = 0; } } } int DP(int a_index, int b_index) { if (a_index == -1 || b_index == -1) { return 0; } else if (dp_data[a_index][b_index] != 0) { return dp_data[a_index][b_index]; } else { int max_length = 0; if (a_str[a_index] == b_str[b_index]) { max_length = max(max_length, DP(a_index - 1, b_index - 1) + 1); } max_length = max(max_length, DP(a_index - 1, b_index)); max_length = max(max_length, DP(a_index, b_index - 1)); dp_data[a_index][b_index] = max_length; return dp_data[a_index][b_index]; } } int main() { cin >> a_str >> b_str; initConfig(); cout << DP(a_str.size() - 1, b_str.size() - 1); }