Олимпиадный тренинг

Задача . A. Объединение слизней


Задача

Темы: реализация *800

На день рождения ваш друг подарил вам n слизней, каждый из которых изначально имеет толщину 1.

Вы решили развлечься. Сначала вы ставите одного слизня на подоконник, а затем последовательно добавляете остальных. При добавлении очередного слизня вы ставите его правее всех уже имеющихся слизней. Пока на подоконнике находится больше одного слизня и крайние два справа имеют одну и ту же толщину v, вы можете объединить их вместе, чтобы создать слизня толщины v + 1.

Определите толщину всех слизней, которые будут стоять на подоконнике в конце этого процесса.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100 000).

Выходные данные

Выведите единственную строку с k целыми числами, где k является итоговым количеством слизней после завершения процедуры, описанной в условии задачи. i-е из этих чисел должно быть толщиной i-го слева слизня.

Примечание

В первом примере у нас есть единственный слизень толщиной 1. Конечное состояние доски — 1.

Во втором примере мы выполняем следующие шаги:

  1. Размещаем на подоконнике одного слизня.
  2. Добавляем ещё одного слизня. Теперь подоконник выглядит как 1 1.
  3. Поскольку два последних слизня имеют одинаковую толщину, то мы заменяем этих слизней на одного слизня толщины 2.

Таким образом, конечное состояние подоконника равно 2.

В третьем примере после добавления первых двух слизней подоконник выглядит как 2. После добавления ещё одного слизня — 2 1.

В последнем примере шаги выглядят следующим образом:

  1. 1
  2. 2
  3. 2 1
  4. 3
  5. 3 1
  6. 3 2
  7. 3 2 1
  8. 4

Примеры
Входные данныеВыходные данные
1 1
1
2 2
2
3 3
2 1
4 8
4

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя