let split_string ?(pattern="") = Str.split @@ Str.regexp pattern
let n = Scanf.sscanf (read_line ()) "%d" @@ fun n -> n
let v = read_line () |> split_string ~pattern:" " |> List.map int_of_string

let rec take res n acc = match (n, acc) with
  | (_, []) | (0, _) -> List.rev res
  | (i, x :: xs) -> take (x :: res) (n - 1) xs
let take = take []

let rec split a b t = function
  | [] -> (a, b)
  | x :: xs -> if t then split (x :: a) b false xs else split a (x :: b) true xs

module IntMap = Map.Make(struct type t = int let compare = compare end)
let top acc =
  let map = List.fold_left (fun map n ->
    let i = 1 + try IntMap.find n map with Not_found -> 0 in
    IntMap.add n i map
  ) IntMap.empty acc in
  IntMap.bindings map |> List.sort (fun (_, a) (_, b) -> b - a) |> take 2 |> List.map fst

let solve a ta b tb =
  let cnt acc v = List.filter ((<>) v) acc |> List.length in
  List.map (fun x -> List.map (fun y -> (x, y)) tb) ta
    |> List.concat
    |> List.map (fun (x, y) -> if x = y then max_int else cnt a x + cnt b y)
    |> List.fold_left min max_int

let () =
  let a, b = split [] [] true v in
  let ta, tb = top a, top b in
  Printf.printf "%d\n" @@
  if List.length ta = 1 && List.length tb = 1 && List.hd ta = List.hd tb 
  then n / 2 else solve a ta b tb