import Control.Applicative ((<$>)) import qualified Data.IntSet as S import Data.List (sort) -- 与えられた数列の階差数列を求める関数 -- WriterによるPython解と同様の考え方による diff :: Num a => [a] -> [a] diff xs = zipWith (-) (tail xs) (init xs) -- 与えられた数列が二条件を同時に満たすかを判定する関数 isKamo :: [S.Key] -> Bool isKamo = f . S.fromList . diff . sort where f s = S.size s == 1 && S.notMember 0 s main :: IO () main = do -- Nは使わないので読み捨てる _ <- getLine xs <- fmap read . words <$> getLine :: IO [Int] putStrLn $ if isKamo xs then "YES" else "NO"