日本情報オリンピック 第5回本選 第3問 Reloaded

あともうちょっとなんだけど重くて動かない。12点。

module Main (main) where

import Control.Monad
import Data.List (nub, sortBy)
import System.Environment

ex = nub . map (sortBy (flip compare)) . f 

f :: Int -> [[Int]]
f 1 = [[1]]
f x = [x]:concatMap (f' x) [1..(x-1)]

f' x y = map (++ [(x-y)]) $ f y

showResult :: [[Int]] -> String
showResult = concatMap (flip (++) "\n" . unwords . map show)

main = do
    (inputFile:_) <- getArgs
    n <- liftM (read . head . lines) $ readFile inputFile
    writeFile "output.txt" $ showResult $ ex n