import Control.Applicative import Control.Monad import Data.List main :: IO () main = solve <$> readLn >>= prt solve :: Int -> (Int, Int) solve 0 = (1, 0) solve k = head $ do (i, x) <- is (z, y) <- zs guard $ x * y == k guard $ i + z <= 30 return (z, i) where is = map (\x -> (x, x * (x-1) `div` 2)) [2 .. 30] zs = map (\x -> (x, 2 ^ x)) [0 .. 28] prt :: (Int, Int) -> IO () prt (z, i) = do print (i+z) putStrLn $ unwords $ replicate z "0" ++ replicate i "1"