import Control.Applicative ((<$>)) import Control.Monad import Data.List import Data.Char (isSpace) import qualified Data.ByteString.Char8 as B8 import Data.Set (Set) import qualified Data.Set as S main :: IO () main = do B8.getLine solve <$> readIntList >>= print solve :: [Int] -> Int solve xs = let s = foldl' f S.empty xs in if S.size s == 1 then 0 else fst . S.foldl' g (10000000, -10000000) $ s where f s x = S.insert x s g (d, x) y = (min d (y - x), y) readIntList :: IO [Int] readIntList = unfoldr f <$> B8.getLine where f s = do (n, s') <- B8.readInt s return (n, B8.dropWhile isSpace s')