--- /dev/null
+data Move = Move Int Int
+ -- deriving (Show)
+
+instance Show Move where
+ show (Move a b) = show a ++ " " ++ show b
+
+main :: IO ()
+main = do
+ line1 <- getLine
+ let nDisks = read line1 :: Int
+ let moves = solve nDisks 1 2 3
+ print $ length moves
+ putStrLn $ unlines $ map show moves
+
+solve :: Int -> Int -> Int -> Int -> [Move]
+solve 0 _ _ _ = []
+solve n a b c = solve (n-1) a c b ++ [Move a c] ++ solve (n-1) b a c