1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#!/usr/bin/env python3
# coding=utf-8

# Copyright (C) 2022  Paweł Widera
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details:
# http://www.gnu.org/licenses/gpl.html

powers = []
notes = []

n = int(input())


def find_last(value):
	for i in range(len(powers) - 2, -1, -1):
		if powers[i] == value:
			return i
	return None


total = 0
for i in range(1, 128000):
	# count number of bits
	power = sum(map(int, bin(i)[2:]))
	powers.append(power)

	# keep adding powers until overflow
	if total + power <= n:
		notes.append(i)
		total += power
		if total == n:
			break

	# fit the new power by removing an old one with the highest index
	else:
		extra = total + power - n
		index = find_last(extra)
		if index:
			notes.pop(index)
			notes.append(i)
			break


print(len(notes))
print(*reversed(notes))