let succ = function | [] -> assert false | (x, n) :: t -> (x, n+1) :: t let rec bucks = function | [] -> [] | x :: [] -> [(x, 1)] | x :: y :: t when x = y -> succ (bucks (y :: t)) | x :: y :: t -> (x, 1) :: (bucks (y :: t)) let rec solve maxi = function | [] -> maxi | (_, n) :: [] -> max maxi n | (x, n) :: (y, m) :: t when x + 1 = y -> solve (max maxi (n + m)) ((x, m) :: t) | (_, n) :: (x, m) :: t -> solve (max maxi m) ((x, m) :: t) let () = ignore (read_int ()); let l = read_line () in let l = Str.split (Str.regexp " ") l in let l = List.map int_of_string l in let l = List.sort compare l in let l = bucks l in let n = solve 0 l in print_int n; print_newline ()