import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String  s = in.nextLine();
            longestRepeatSubStr(s);
        }
    }

    private static void longestRepeatSubStr(String s) {
        int maxLen = 0;
        for (int i = 0; i < s.length() - 1; i++) {
            for (int j = i + 1; j < s.length(); j++) {
                int len = 0;
			    // 重复字符串的第一个串的起始下标;
                int fi = i;
			  // 重复字符串的第二个串的起始下标
                int si = j;
                // 其实就是枚举,如果是重复字符串,那么起始位置后边的几个都是一样的。
                // 从每个位置开始往后找。找到相同的,则循环去比较数据
                while (fi < s.length() && si < s.length() && s.charAt(fi) == s.charAt(si)) {
                    fi++;
                    si++;
                    len++;
                }
                maxLen = Math.max(len, maxLen);
            }
        }

        System.out.println(maxLen);
    }
}