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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
n = int(input())

# print("n", n)

def dec_to_bin(nr):
  if nr == 0:
    return "0"

  out = ""

  while nr > 0:
    if nr % 2 == 1:
      out = "1" + out
    else:
      out = "0" + out
    nr = nr // 2
  return out

def ile_jedynek(k):
  txt = dec_to_bin(k)
  o = 0
  for i in range(len(txt)):
    if txt[i] == "1":
      o += 1
  # print("k", k, "jjj", o)
  return o

wynik = []

i = 1
jedynek = 0
while jedynek < n:
  jedynek = i * (2**(i-1))
  liczba = (2**i - 1)
  potega = i
  # print("liczba:",liczba, "#jedynek:", jedynek, " i:", i)
  i += 1



# print("\njedynek", jedynek, "liczba", liczba)


if jedynek == n:
  for i in range(1, liczba + 1):
    wynik.append(i)
  # print("ok ...", wynik)
else:
  za_duzo = jedynek - n
  # print("za duzo o", za_duzo, "zmniejszamy...")
  # e()
  j  = potega - 1
  # while za_duzo - jedynek2 > 0:
  z = 1
  while j > 0:
    # z = z + 1
    jedynek2 = j * (2**(j-1)) + (2**(j-1))*z - (j-1) * (2**(j-2))
    # print("jedynek2", jedynek2, "  ---- j:", j, "a1:", (2**(j-1)), "a2:", (2**(j-1)), "z:", z)
    if za_duzo - jedynek2 > 0:
      za_duzo = za_duzo - jedynek2
      cof =  (2**(j-1))
      liczba = liczba - cof
      # print("cofamy się o ", cof, "do liczby:", liczba, "odejmujac jedynek2:", jedynek2)
    else:
      z = z + 1

    j  = j - 1

  # print("liczba3:", liczba, "za_duzo", za_duzo)

  for i in range(1, liczba + 1):
    wynik.append(i)

  while za_duzo > 0:
    x = ile_jedynek(liczba)
    if x <= za_duzo:
      za_duzo = za_duzo - x
      wynik.remove(liczba)
      # print("wyrzucamy liczbe:", liczba)
    liczba = liczba - 1

wynik.reverse()

print(len(wynik))
print(*wynik, sep = " ")