#include <iostream>
#include <vector>
using namespace std;
int main() {
string s, t;
cin >> s >> t;
int m = s.size(), n = t.size();
// 定义 dp 数组,初始化为 0
vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0));
int maxLen = 0; // 记录最长公共子串的长度
// 填充 dp 数组
for (int i = 1; i <= m; ++i) {
for (int j = 1; j <= n; ++j) {
if (s[i - 1] == t[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1; // 状态转移
maxLen = max(maxLen, dp[i][j]); // 更新最大值
} else {
dp[i][j] = 0; // 不相等时,长度为 0
}
}
}
// 输出结果
cout << maxLen << endl;
return 0;
}