source_code: import static java.lang.Math.*;
  import static java.util.Arrays.*;
  import java.io.*;
  import java.util.*;
  
  public class Main {
      static boolean LOCAL = false;//System.getSecurityManager() == null;
      Scanner sc = new Scanner(System.in);
      
      void run() {
          char[] cs = sc.nextLine().toCharArray();
          int res = 0;
          for (int s1 = 0; s1 < cs.length; s1++) {
              for (int s2 = s1 + 1; s2 < cs.length; s2++) {
                  int len = 0;
                  while (s2 + len < cs.length && cs[s1 + len] == cs[s2 + len]) {
                      len++;
                  }
                  res = max(res, len);
              }
          }
          System.out.println(res);
      }
      
      class Scanner {
          BufferedReader br;
          StringTokenizer st;
          Scanner(InputStream in) {
              br = new BufferedReader(new InputStreamReader(in));
              eat("");
          }
          void eat(String s) {
              st = new StringTokenizer(s);
          }
          String nextLine() {
              try {
                  return br.readLine();
              } catch (IOException e) {
                  throw new RuntimeException(e);
              }
          }
          boolean hasNext() {
              while (!st.hasMoreTokens()) {
                  String s = nextLine();
                  if (s == null) return false;
                  eat(s);
              }
              return true;
          }
          String next() {
              hasNext();
              return st.nextToken();
          }
          int nextInt() {
              return Integer.parseInt(next());
          }
          long nextLong() {
              return Long.parseLong(next());
          }
          double nextDouble() {
              return Double.parseDouble(next());
          }
      }
      
      void debug(Object...os) {
          System.err.println(deepToString(os));
      }
      
      public static void main(String[] args) {
          if (LOCAL) {
              try {
                  System.setIn(new FileInputStream("in.txt"));
              } catch (Throwable e) {
                  LOCAL = false;
              }
          }
          if (!LOCAL) {
              try {
                  Locale.setDefault(Locale.US);
                  System.setOut(new PrintStream(new BufferedOutputStream(System.out)));
              } catch (Throwable e) {
              }
          }
          new Main().run();
          System.out.flush();
      }
  }
  