-- Question D

import Data.List
import Control.Applicative
import Control.Monad

main = do
  k <- readLn ::IO Integer
  putStrLn $ show ( checkn k)
  putStrLn $ unwords (map (show) (check (k `div` (10^16)) k) )
  

checkn :: Integer -> Integer
checkn k 
 | k == 0 = 2
 | (k `div` (10^16)) <2 = 2
 | otherwise = (k `div` (10^16))

check :: Integer -> Integer -> [Integer]
check i k 
 | k == 0 = [1,0]
 | k == 1 = [2,0] 
 | i == 0 = [(k `div` 2)+1, (k - (k `div` 2))+1]
 | i == 1 = [(k `div` 2)+1, (k - (k `div` 2))+1]
 | otherwise = [ x+(k `div` i)-x+i | x<-[1..(i-1)] ] ++ [k-(i-1)*(k `div` i)]