merge xs [] = xs
merge [] xs = xs
merge (x:xs) (y:ys)
  | x < y     = x : merge xs (y:ys)
  | otherwise = y : merge (x:xs) ys

msort [] = []
msort [x] = [x]
msort xs = merge (msort $ take h xs) (msort $ drop h xs)
  where h = length xs `div` 2

judge [] = True
judge (x:xs)
  | even $ length $ filter (== x) (x:xs)  = judge xs'
  | otherwise                             = False
  where xs' = snd $ break (/= x) (x:xs)


main = do
  ans <- judge . msort <$> getLine
  putStrLn (if ans then "Yes" else "No")
  
  
  
