fun readInt () = valOf (TextIO.scanStream (Int.scan StringCvt.DEC) TextIO.stdIn) fun insertionSortNoDuplicate l = let fun insert x [] = [x] | insert x (y::ys) = if x = y then y::ys else if x < y then x::y::ys else y::(insert x ys) in foldl (fn (x, acc) => insert x acc) [] l end fun findAns l = let fun findAnsLoop [] min = min | findAnsLoop [_] min = min | findAnsLoop (h1 :: h2 :: tl) min = if h2 - h1 < min then findAnsLoop (h2 :: tl) (h2 - h1) else findAnsLoop (h2 :: tl) min val limit = 9999999 val ans = findAnsLoop (insertionSortNoDuplicate l) limit in if ans = limit then 0 else ans end val () = let val n = readInt () val x_s = List.tabulate (n, fn _ => readInt ()) val ans = findAns x_s in print (Int.toString ans ^ "\n") end