{-# LANGUAGE RankNTypes #-}
import Control.Monad.State
import Control.Monad.ST
import Data.Array.ST
import Control.Arrow
import Control.Monad
import Data.List
import qualified Data.ByteString.Char8 as B
import Data.Ord

main :: IO ()
main = getLine >> readLine >>= print . solve

solve :: [Int] -> Int
solve vs = check as bs
    where
        check xxs@((an, al) : xs) yys@((bn, bl) : ys)
            | an /= bn = n - al - bl
            | otherwise = min (check xs yys) $ check xxs ys
        check ((_, al) : _) _ = n - al
        check _ ((_, bl) : _) = n - bl 
        check _ _ = n

        as = count es
        bs = count os 

        n = length vs

        count = sortBy cmpf . map mf . group . sort
            where
                cmpf lhs rhs = comparing snd rhs lhs `mappend` comparing fst lhs rhs
                mf = (,) <$> head <*> length 

        (es, os) = fst $ foldr ff (([], []), True) vs
            where
                ff v ((acc, bcc), f)
                    | f = ((v : acc, bcc), not f)
                    | otherwise = ((acc, v : bcc), not f)

readLine :: IO [Int]
readLine = unfoldr (fmap (second (maybe B.empty snd . B.uncons)) . B.readInt) <$> B.getLine

readContents :: Int -> IO [[Int]]
readContents = flip replicateM readLine

type Table s a b = STArray s a (Maybe b)
type Memo s a b = a -> StateT (Table s a b) (ST s) b

evalMemo :: (Ix a) => (forall s. Memo s a b -> Memo s a b) -> a -> Table s a b -> ST s b
evalMemo f k = evalStateT (memoizeFix f k)

memoizeFix :: (Ix a) => (forall s. Memo s a b -> Memo s a b) -> forall s. Memo s a b
memoizeFix f k = get >>= (\arr -> lift (readArray arr k) >>= maybe (f (memoizeFix f) k >>= ((<$) <*> (lift . writeArray arr k . Just))) return)