import Data.List (nub, sort) allTheSame :: (Eq a) => [a] -> Bool allTheSame xs = all (== head xs) xs adjacentElements :: Int -> [a] -> [[a]] adjacentElements = adjacentElements' [] where adjacentElements' ys n xs@(_ : xr) | length xs >= n = adjacentElements' (ys ++ [take n xs]) n xr | otherwise = ys findMinimumDistance :: [Int] -> Int findMinimumDistance xs | allTheSame ys = 0 | otherwise = minimum $ map (\(x : y : _) -> y - x) $ adjacentElements 2 ys where ys = sort $ nub xs main :: IO () main = print . findMinimumDistance . map read . words . head . drop 1 . lines =<< getContents