local mmi, mma, mab = math.min, math.max, math.abs
local n = io.read("*n", "*l")
local s = io.read()
local sa = {}
for i = 1, n do
  table.insert(sa, {i, s:sub(i, n)})
end
table.sort(sa, function(x, y) return x[2] < y[2] end)
local lcpa = {}
for i = 1, n - 1 do
  local len = mmi(#sa[i][2], #sa[i + 1][2])
  local c = 0
  for j = 1, len do
    if sa[i][2]:sub(j, j) == sa[i + 1][2]:sub(j, j) then
      c = c + 1
    else break end
  end
  lcpa[i] = c
end
local ret = 0
for i = 1, n - 1 do
  local prv = lcpa[i]
  for j = i, n - 1 do
    local nxt = lcpa[j]
    if nxt == 0 then
      break
    else
      prv = mmi(prv, nxt)
      ret = mma(ret, mmi(prv, mab(sa[j + 1][1] - sa[i][1])))
    end
  end
end
print(ret)
