已结束 【普及组】GESP“飞翔杯”第四届季度赛

A5248 | merge

时间限制1s
内存限制128MB
通过 / 提交0/0

题目描述

作为一个计算机科学家,小Y很喜欢研究零和一。

在一个仅包含 0 和 1 的序列中,小Y会通过对一些位置小Y掌握 $n$ 种魔法,这 $n$ 种魔法是有序的,每种魔法都有一个法力值 $a_i$。他可以把法力值相同的两个魔法进行升级。小Y升级魔法按照如下的步骤进行:

1. 找出能够升级(即出现大于等于2次)的魔法,并对法力值最小的魔法进行升级。

2. 若法力值最小的魔法存在大于2个,找出最早出现(下标最小)的两个魔法进行升级。

3. 升级时,将第一个魔法附加到第二个魔法上。第一个魔法会消失,第二个魔法的法力值会翻倍。

请你求出,小Y不断进行这样的升级直到没有魔法能够升级后,最终得到的每个魔法的法力值。

输入格式

输入共两行。

第一行,一个正整数,表示魔法数量 $n$;

第二行,$n$ 个正整数,第 $i$ 个正整数代表第 $i$ 个魔法的法力值 $a_i$。

输出格式

输出共两行。

第一行,输出最终的魔法数量;

第二行,按顺序输出每个魔法的法力值。

输入输出样例

输入 #1
7
3 4 1 2 2 1 1
输出 #1
4
3 8 2 1 
输入 #2
5
1 1 3 1 1
输出 #2
2
3 4 
输入 #3
5
10 40 20 50 30
输出 #3
5
10 40 20 50 30 
C++ 编辑器
输入
输出