#include <stdio.h>
#include <string.h>

/*
   比较两字符串,注意不区分大小写,
   若遇到相等的字符,则开始计数,若遇到不相等的字符,则重新计数

   注意思路:
   从某一字符串开始比较,则需要再另一个字符串中找到所有以该字符开头的字符串,
   并在此过程中不断更新字符串长度,保存每一步得到的更大的长度值

   // 注意大部分用例通过时,看看题意,是不是漏了某种情况,如此题的大小写

   abbaabbaa
   bbbbbababbabaabbaabba
   9

   动态规划可参见:(最长公共子串(序列))
   https://blog.csdn.net/u010352111/article/details/53980062
*/

int getCommonStrLength(char * s1, char * s2)
{
    int len,i,j,k,q;
    int count = 0;
    int max = 0;

    // 先全部转换为小写,去除大小写之分
    // 注意大部分用例通过时,看看题意,是不是漏了某种情况,如此处的大小写
    for(i=0;s1[i]!='\0';i++){
        if(s1[k]>='A' && s1[k]<='Z'){
            s1[k] = s1[k]-'A'+'a';
        }
    }
    for(k=0;s2[k]!='\0';k++){
        if(s2[k]>='A' && s2[k]<='Z'){
            s2[k] = s2[k]-'A'+'a';
        }
    }

    for(i=0;s1[i]!='\0';i++){
        for(j=0;s2[j]!='\0';j++){
           // 找以s1[i]开头的所有字符串,存储最大的长度值
            if(s1[i] == s2[j]){
                count = 0;
                for(k=i,q=j;s1[k]==s2[q] && s1[k]!='\0' && s2[q]!='\0';q++,k++){
                    count++;
                    if(count>max){
                        max = count;
                    }
                }
            }
        }
        count = 0; // 进入下一轮比较时,将上一次的结果清0,重新累计
    }
    return max;
}

int main()
{
    char s1[10000]="";
    char s2[10000]="";

    while(scanf("%s %s",s1,s2)!=EOF){
        int n;
        n = getCommonStrLength(s1,s2);
        printf("%d\n",n);
    }

    return 0;
}