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

Задача . D. Генерация наборов


Вам задан набор Y из n различных целых положительных чисел y1, y2, ..., yn.

Назовём набор X из n различных целых положительных чисел x1, x2, ..., xn генератором для Y, если из набора X можно получить набор Y, применяя к элементам набора X следующие две операции:

  1. Умножить произвольное число xi на два, то есть заменить xi на xi.
  2. Умножить произвольное число xi на два и прибавить единицу, то есть заменить xi на xi + 1.

Обратите внимание, не требуется, чтобы все числа в наборе X были различны после выполнения каждой операции.

Наборы в данной задаче сравниваются как множества чисел. Другими словами, два набора различных чисел X и Y совпадают, если, выписав оба набора в отсортированном порядке, мы получим одинаковые массивы.

Заметьте, что любой набор чисел (или его перестановка) сам является одним из своих генераторов.

По заданному набору Y найдите его генератор, в котором максимальное число минимально.

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

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

Во второй строке записаны n чисел y1, ..., yn (1 ≤ yi ≤ 109). Гарантируется, что все числа в наборе различны.

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

Выведите n чисел — генератор для заданного набора Y, в котором максимальное число как можно меньше. Если подходящих наборов несколько, разрешается вывести любой из них.


Примеры
Входные данныеВыходные данные
1 5
1 2 3 4 5
4 5 2 3 1
2 6
15 14 3 13 1 12
12 13 14 7 3 1
3 6
9 7 13 17 5 11
4 5 2 6 3 1

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

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