#include <cstdio>
#include <algorithm>
using namespace std;
//思路:对于A[i],max(A[1..i-1] ,A[i]) = A[i]; min(A[i+1..N-1] ,A[i]) = A[i] 即为主元
int A[100010], ans[100010], minright[100010];
int maxn = 1000000001;
int main(){
int N;
scanf("%d",&N);
for(int i=0; i<N; i++){
scanf("%d", &A[i]);
}
int maxleft = 0, minr = maxn, count = 0, index = 0;
//用minright[j]数组记录A[j+1...N-1]的最小值
for(int j = N-1; j>=0; j--){
if(j == N-1) minright[j] = maxn;
else{
minr = min(minr, A[j+1]);
minright[j] = minr;
}
}
//实现前面讲的思路
for(int i=0; i<N; i++){
if(i == 0){
if(A[i] < minright[i]){
count++;
ans[index++] = A[i];
}
}
else if(i == N-1){
if(A[i] > maxleft){
count++;
ans[index++] = A[i];
}
}
else{
maxleft = max(maxleft,A[i-1]);
if(A[i] > maxleft && A[i] < minright[i]){
count++;
ans[index++] = A[i];
}
}
}
printf("%d\n",count);
if(count == 0){
printf("\n");
return 0;
}//没有这个if,有个测试样例格式出错
sort(ans,ans+count);
for(int i=0; i<count; i++){
printf("%d",ans[i]);
if(i != count-1) printf(" ");
}
return 0;
}