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

Задача . D. Сляние равных


Задан массив положительных целых чисел. Пока в нем есть хотя бы два одинаковых элемента, будем выполнять следующую операцию. Выберем \(x\) — наименьшее значение, которое встречается в нем \(2\) или более раз. Возьмём два первых вхождения \(x\) в этот массив (два самых левых). Удалим левое из этих двух вхождений, а правое заменим на сумму двух значений (то есть на \(2 \cdot x\)).

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

Например, массив изначально был равен \([3, 4, 1, 2, 2, 1, 1]\). Он будет изменяться следующим образом: \([3, 4, 1, 2, 2, 1, 1]~\rightarrow~[3, 4, 2, 2, 2, 1]~\rightarrow~[3, 4, 4, 2, 1]~\rightarrow~[3, 8, 2, 1]\).

Если же массив изначально был равен \([1, 1, 3, 1, 1]\), то он будет изменяться следующим образом: \([1, 1, 3, 1, 1]~\rightarrow~[2, 3, 1, 1]~\rightarrow~[2, 3, 2]~\rightarrow~[3, 4]\).

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

В первой строке следует целое число \(n\) (\(2 \le n \le 150\,000\)) — количество элементов в массиве.

Во второй строке следует последовательность из \(n\) элементов \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^{9}\)) — описание массива.

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

В первую строку выведите целое число \(k\) — количество элементов в массиве после выполнения операций. Во вторую строку выведите \(k\) целых чисел — описание массива после выполнения операций.

Примечание

Первые два примера разобраны в условии.

В третьем примере все числа в массиве различные, поэтому он не изменится.


Примеры
Входные данныеВыходные данные
1 7
3 4 1 2 2 1 1
4
3 8 2 1
2 5
1 1 3 1 1
2
3 4
3 5
10 40 20 50 30
5
10 40 20 50 30

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

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