source_code: import java.io.InputStream;
  import java.io.OutputStream;
  import java.io.InputStreamReader;
  import java.io.BufferedReader;
  import java.io.IOException;
  import java.io.PrintWriter;
  import java.io.FileInputStream;
  import java.io.FileOutputStream;
  import java.io.File;
  import java.io.FileNotFoundException;
  import java.util.Arrays;
  import java.util.Random;
  import java.util.StringTokenizer;
  
  public class Task {
  
  	private static final boolean readFromFile = false;
  	
  	public static void main(String args[]){
  		InputStream inputStream = System.in;
  		OutputStream outputStream = System.out;
  		FileOutputStream fileOutputStream;
  		FileInputStream fileInputStream;
  		if (readFromFile){
  			try{
  				fileInputStream = new FileInputStream(new File("input.txt"));
  				fileOutputStream = new FileOutputStream(new File("output.txt"));
  			}catch (FileNotFoundException e){
  				throw new RuntimeException(e);
  			}
  		}
  		PrintWriter out = new PrintWriter((readFromFile)?fileOutputStream:outputStream);
  		InputReader in = new InputReader((readFromFile)?fileInputStream:inputStream);
  		
  		Solver s = new Solver(in,out);
  		s.solve();
  		
  		out.close();
  	}
  }
  
  class Solver{
  	InputReader in;
  	PrintWriter out;
  	
  	public void solve(){
  		String s = in.nextLine();
  		for (int len=s.length()-1;len>=1;len--)
  			for (int i=0;i<s.length()-len+1;i++)
  				for (int j=i+1;j<s.length()-len+1;j++)
  					if (s.substring(i,i+len).equals(s.substring(j,j+len))){
  						out.println(len);
  						return;
  					}
  		out.println(0);
  	}
  
  		
  	Solver(InputReader in, PrintWriter out){
  		this.in=in;
  		this.out=out;
  	}
  }
  
  class InputReader{
  	private BufferedReader buf;
  	private StringTokenizer tok;
  	
  	InputReader(InputStream in){
  		tok = null;
  		buf = new BufferedReader(new InputStreamReader(in));
  	}
  	
  	InputReader(FileInputStream in){
  		tok = null;
  		buf = new BufferedReader(new InputStreamReader(in));
  	}
  	
  	public String next(){
  		while (tok==null || !tok.hasMoreTokens()){
  			try{
  				tok = new StringTokenizer(buf.readLine());
  			}catch (IOException e){
  				throw new RuntimeException(e);
  			}
  		}
  		return tok.nextToken();
  	}
  	
  	public int nextInt(){
  		return Integer.parseInt(next());
  	}
  	
  	public long nextLong(){
  		return Long.parseLong(next());
  	}
  	
  	public double nextDouble(){
  		return Double.parseDouble(next());
  	}
  	
  	public float nextFloat(){
  		return Float.parseFloat(next());
  	}
  	
  	public String nextLine(){
  		try{
  			return buf.readLine();
  		}catch (IOException e){
  			return null;
  		}
  	}
  	
  }