Sereja loves integer sequences very much. He especially likes stairs.
Sequence a1, a2, ..., a|a| (|a| is the length of the sequence) is stairs if there is such index i (1 ≤ i ≤ |a|), that the following condition is met:
For example, sequences [1, 2, 3, 2] and [4, 2] are stairs and sequence [3, 1, 2] isn't.
Sereja has m cards with numbers. He wants to put some cards on the table in a row to get a stair sequence. What maximum number of cards can he put on the table?
The first line contains integer m (1 ≤ m ≤ 105) — the number of Sereja's cards. The second line contains m integers bi (1 ≤ bi ≤ 5000) — the numbers on the Sereja's cards.
In the first line print the number of cards you can put on the table. In the second line print the resulting stairs.
5 1 2 3 4 5
5 5 4 3 2 1
6 1 1 2 2 3 3
5 1 2 3 2 1
——————————————————————————————————————————
#include<bits/stdc++.h>
#define M 100001
using namespace std;
int a[M],vis[5001], b[M];
int main()
{
memset(vis,0,sizeof vis);
int n,x,maxx=-1;
scanf("%d",&n);
for(int i=0;i<n;++i){
scanf("%d",&x);
vis[x]++; //累计出现的次数
if(x>maxx) maxx=x; //找到最大的
}
int k=0,cnt=1;
for(int i=0;i<maxx;++i){
if(vis[i]>=2){ //如果比最大的小,而且出现次数大于2,那么可以放在前半部分
cnt++;
b[k++]=i;
vis[i]--;
}
}
b[k++]=maxx;
for(int i=maxx-1;i>=0;--i){
if(vis[i]){ //只要比最大的数小,而且有出现,就放到后半部分
b[k++]=i;
cnt++;
}
}
cout<<cnt<<endl;
for(int i=0;i<k;++i){
cout<<b[i]<<" ";
}
cout<<endl;
return 0;
}