program repeating(input, output); const MAX_STR = 64; type MyString = array [1..MAX_STR] of char; var len,reps : integer; str : MyString; function ReadString(var str : MyString) : integer; var Character : char; Counter : integer; begin Counter := 0; repeat read(Character); str[Counter+1] := Character; Counter := Counter + 1; until (eoln or (Character = ' ')); if (Character = ' ') then begin Counter := Counter - 1; end; ReadString := Counter; end; function repeatsOfLen(var ptr : MyString; start, replen, strlast : integer) : integer; var ord, next, j, no : integer; begin ord := 1; next := start + replen; while ((next + replen - 1) <= strlast) do begin no := 0; for j := 0 to (replen-1) do begin if (ptr[start + j] <> ptr[next + j]) then begin no := 1; end; end; if (no = 1) then begin next := strlast + 1; end else begin next := next + replen; ord := ord + 1; end; end; repeatsOfLen := ord; end; function tryAt(var str : MyString; start, len : integer) : integer; var i, ord, tmp : integer; begin ord := 1; i := 1; while (i <= ((len-start+1)/2)) do begin tmp := repeatsOfLen(str, start, i, len); if (tmp > ord) then begin ord := tmp; end; i := i + 1; end; tryAt := ord; end; function findRepeat(var str : MyString; len : integer) : integer; var ord, start, tmp, i : integer; begin start := 1; ord := 0; while (start < len) do begin tmp := tryAt(str, start, len); if (tmp > ord) then begin ord := tmp; end; start := start + 1; end; findRepeat := ord; end; begin len := ReadString(str); reps := findRepeat(str,len); writeln('Maximal repeat: ',reps:0); end.