import Control.Monad import Data.List main = do n <- getLine putStrLn (replace n) replace n = maximum $ (n:) $ do guard (reverse (sort n) /= n) i <- [0 .. length n - 1] j <- [i .. length n - 1] guard (n!!i < n!!j) let (ns12,(nb:ns3)) = splitAt j n let (ns1,(na:ns2)) = splitAt i ns12 return (ns1++(nb:ns2)++(na:ns3))