#50. 「2021 新生杯」找呀找呀找朋友

内存限制:512 MiB 时间限制:1000 ms 标准输入输出
题目类型:传统 评测方式:文本比较
上传者: woruo

题目描述

在唐辛子星上有 位小朋友,每个小朋友有一个 DD 值,表示他/她的 DD 程度。如果两个小朋友的 DD 值不同,那他们可以成为朋友,否则不能成为朋友。

你可以从这 位小朋友中选出 位小朋友,使他们成为朋友。再对剩余的 位小朋友继续操作,直到选不出 位可以成为朋友的小朋友为止。

显然,每次操作时你都可能有多种满足条件的选法。例如,当前有 位小朋友,DD 值分别为 。那么有 种选择方案:你可以选择第 位小朋友和第 位小朋友,也可以选择第 位和第 位小朋友。

在每次选择时,请你尽可能最大化当前的可选方案数。

请问你可以选择多少对小朋友让他们成为朋友呢?并且,你还需要输出每次的可选方案数。

输入格式

第一行一个正整数 (),表示共有 位小朋友。

第二行有 个正整数,用一个空格隔开,第 个数 () 表示第 位小朋友的 DD 值。

输出格式

首先,输出一行一个整数 ,表示最多能选择 对小朋友。

接着,输出 行,每行一个正整数 ,表示每次选择时的最大方案数。

样例

样例输入

5
1 2 2 3 3

样例输出

2
8
3

数据范围与提示

最开始,你有 种选法。

若第 次选择一位 DD 值为 和一位 DD 值为 的小朋友,则剩下的小朋友的 DD 值分别是 。还可以继续选 次,有 种选法。

若第 次选择一位 DD 值为 和一位 DD 值为 的小朋友,则剩下的小朋友的 DD 值分别是 。还可以继续选 次,有 种选法。

若第 次选择一位 DD 值为 和一位 DD 值为 的小朋友,则剩下的小朋友的 DD 值分别是 。还可以继续选 次,有 种选法。

所以第 次应该选择一位 DD 值为 和一位 DD 值为 的小朋友,这样才能使接下来的可选方案数最大。