#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int T[1000001],n,v[1000001],d[1000001],sol[1000001],p;
int M;
void afis(int x)
{
if(sol[x])
afis(sol[x]);
g<<v[x]<<' ';
}
void ad(int a,int b,int k,int piv,int x)
{
if(a==k&&b==k)
{
T[piv]=x;
}
else
{
if(k<=(a+b)/2)
ad(a,(a+b)/2,k,2*piv,x);
else
ad((a+b)/2+1,b,k,2*piv+1,x);
if(d[T[2*piv+1]]>d[T[2*piv]])
T[piv]=T[2*piv+1];
else
T[piv]=T[2*piv];
}
}
void af_max(int a,int b,int y,int z,int piv,int capat,int &M,int &rad)
{
if(a>=y&&b<=z)
{
if(v[T[piv]]<capat)
{
if(d[T[piv]]>M)
{
M=d[T[piv]];
rad=T[piv];
}
}
else
{
af_max(a,(a+b)/2,y,z,2*piv,capat,M,rad);
af_max((a+b)/2+1,b,y,z,2*piv+1,capat,M,rad);
}
}
else
{
if((a>=y&&a<=z)||(y<=b&&b<=z)||(a<=y&&z<=b))
{
af_max(a,(a+b)/2,y,z,2*piv,capat,M,rad);
af_max((a+b)/2+1,b,y,z,2*piv+1,capat,M,rad);
}
}
}
int main()
{
f>>n;
for(int i=1; i<=n; i++)
{
f>>v[i];
}
d[1]=1;
ad(1,n,1,1,1);
for(int k=2; k<=n; k++)
{
af_max(1,n,1,k-1,1,v[k],d[k],sol[k]);
++d[k];
ad(1,n,k,1,k);
if(M<d[k])
{
p=k;
M=d[k];
}
}
g<<M;
g<<'\n';
afis(p);
return 0;
}