open System
open System.Collections.Generic

module InputUtility =
    let InputTokens = new Queue<string>()

    let EnsureInput () =
        if InputTokens.Count = 0 then
            let input = Console.ReadLine ()
            let s = input.Split ([|' '|], StringSplitOptions.RemoveEmptyEntries)
            if s.Length > 0 then
                for x in s do InputTokens.Enqueue(x)
                true
            else false
        else true

    let rec ReadNext () =
        if EnsureInput () then InputTokens.Dequeue ()
        else ReadNext ()

    let ReadNextInt () = ReadNext () |> int

    let Read2Int () = ReadNextInt (), ReadNextInt ()

    let Read3Int () = ReadNextInt (), ReadNextInt (), ReadNextInt ()

    let ReadListOf f n =
        let rec loop acc = function
            | 0 -> List.rev acc
            | c -> loop ((ReadNext () |> f) :: acc) (c-1)
        loop [] n

    let MultipleCaseWithId f =
        let caseNum = ReadNextInt ()
        let rec loop index =
            if index = caseNum then ()
            else
                f index
                loop (index + 1)
        loop 0

    let MultipleCase f = MultipleCaseWithId (fun _ -> f ())

    let ReadList n =
        let rec loop acc = function
            | 0 -> List.rev acc
            | c -> loop (ReadNext () :: acc) (c-1)
        loop [] n

open InputUtility

module AGC016 =
    let private Shrinking () =
        let cal len l =
            //printfn "L: %A" l
            let rec loop d =
                let cur = l |> Seq.map (fun x -> x - d, x)
                let covered = 
                    [0..len-d-1]
                    |> Seq.forall (fun x ->
                        l |> Seq.exists (fun y ->
                            x <= y && x + d >= y))
                //printfn "\t%d: %A" d covered
                if covered then d else loop (d + 1)
            loop 0
        let str = ReadNext ()
        str
        |> Seq.mapi (fun i c -> i, c)
        |> Seq.groupBy snd
        |> Seq.map (snd >> Seq.map fst >> Seq.cache >> cal str.Length)
        |> Seq.min
        |> printfn "%d"

    let Entry = Shrinking

AGC016.Entry ()