import java.util.Scanner;
//动态规划
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) { // 注意 while 处理多个 case
            String[] a = in.nextLine().split("");
            String[] b = in.nextLine().split("");
            int[][] c = new int[a.length + 1][b.length + 1];
            int max = 0;
            for (int i = 1; i < a.length + 1; i++) {
                for (int j = 1; j < b.length + 1; j++) {
                    if (a[i - 1].equals(b[j - 1])) {
                        c[i][j] = c[i - 1][j - 1] + 1;
                        if (max < c[i][j]) max = c[i][j];
                    } else {
                        c[i - 1][j - 1] = 0;
                    }
                }
            }
            System.out.print(max);
        }
    }
}


// 穷举法
// public class Main {
//     public static void main(String[] args) {
//         Scanner in = new Scanner(System.in);
//         while (in.hasNext()) { // 注意 while 处理多个 case
//             String a = in.nextLine();
//             String b = in.nextLine();
//             if (a.length() > b.length()) {
//                 String t = b;
//                 b = a;
//                 a = t;
//             }
//             int max = 0;
//             for (int i = 0; i < b.length(); i++) {
//                 for (int j = b.length(); j > i ; j--) {
//                     String t = b.substring(i, j);
//                     if (a.contains(t)) {
//                         max = max < t.length() ? t.length() : max;
//                         //算出最大的就可以break了
//                         break;
//                     }
//                 }
//             }
//             System.out.println(max);
//         }
//     }
// }