import sys sys.setrecursionlimit(10050) def search(x): # a * a <= y を満たす最大のaを求める lb = 1 ub = x + 1 while ub - lb > 1: mid = (ub + lb) // 2 if mid * mid <= x: lb = mid else: ub = mid return lb def dfs(x,y,n): global ans,tmp,ans2 if n > 15: return if x == 0: print(n) print(*tmp) exit() return if y == 1: if n + x < 16: print(n + x) print(*(tmp + [1] * x)) exit() return ret = 0 xdy = x // (y * y) tmp += [y * y] * xdy for i in reversed(range(1, xdy + 1)): dfs(x - y * y * i, y, n + 1) tmp.pop() y -= 1 if x // (y * y) + n < 16: dfs(x, y, n) tmp = [] S = int(input()) y = search(S) dfs(S,y,0)