import System.Environment showMove src dst = do putStrLn (src ++ " -> " ++ dst) hanoi 1 src dst tmp = [(src, dst)] hanoi n src dst tmp = hanoi (n-1) src tmp dst ++ hanoi 1 src dst tmp ++ hanoi (n-1) tmp dst src main = do args <- getArgs mapM (uncurry showMove) (hanoi (read (head args) :: Int) "1" "3" "2")