import Control
. Monad . Writer
import Data. Monoid
merge ( x:xs) ( y:ys)
| x
<= y
= do { temp
<- merge xs
( y:ys
) ;
return ( x:temp
) } temp <- merge ( x:xs) ys
mergeSort xs = do
slx <- mergeSort lx
srx <- mergeSort rx
merge slx srx
aW1wb3J0IENvbnRyb2wuTW9uYWQKaW1wb3J0IENvbnRyb2wuTW9uYWQuV3JpdGVyCmltcG9ydCBEYXRhLk1vbm9pZAoKbWVyZ2UgOjogW0ludF0gIC0+IFtJbnRdICAtPiBXcml0ZXIgKFN1bSBJbnQpIFtJbnRdCm1lcmdlIFtdIHlzID0gcmV0dXJuIHlzCm1lcmdlIHhzIFtdID0gcmV0dXJuIHhzCm1lcmdlICh4OnhzKSAoeTp5cykKICAgICAgfCB4IDw9IHkgPSBkbyB7IHRlbXAgPC0gbWVyZ2UgeHMgKHk6eXMpOyAgcmV0dXJuICh4OnRlbXApIH0KICAgICAgfCBvdGhlcndpc2UgPSBkbwogICAgICAgICAgICAgICAgICAgICB0ZW1wIDwtIG1lcmdlICh4OnhzKSB5cwogICAgICAgICAgICAgICAgICAgICB0ZWxsIChTdW0gKGxlbmd0aCAoeDp4cykpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHk6dGVtcCkKCm1lcmdlU29ydCA6OiBbSW50XSAtPiBXcml0ZXIgKFN1bSBJbnQpIFtJbnRdCm1lcmdlU29ydCBbXSA9IHJldHVybiBbXQptZXJnZVNvcnQgW3hdID0gcmV0dXJuIFt4XQptZXJnZVNvcnQgeHMgPSBkbwogICAgICAgICAgICAgICAgbGV0IChseCwgcngpID0gc3BsaXRBdCAoZGl2IChsZW5ndGggeHMpIDIpIHhzCiAgICAgICAgICAgICAgICBzbHggPC0gbWVyZ2VTb3J0IGx4CiAgICAgICAgICAgICAgICBzcnggPC0gbWVyZ2VTb3J0IHJ4CiAgICAgICAgICAgICAgICBtZXJnZSBzbHggc3J4