#include <iostream>
#include<fstream>
using namespace std;
#define N 5005
int v[N],i,j,n,d[N],urmator[N],lmn,curr,trecut[N];
int sol[N],w[N],p[N];
void drum(int poz,int l)
{
w[l]=v[poz];
if(l>1)
drum( trecut[poz] , l-1 );
}
void drum_poz(int poz,int l)
{
p[l]=poz;
if(l>1)
drum_poz( trecut[poz] , l-1 );
}
void solve(int dim,int finish)
{
bool ok=1;
for(int i=1;i<=dim && ok;++i)
if(sol[i]<w[i])
return;
else
if(w[i]<sol[i])ok=0;
if(!ok)
{
for(int i=1;i<=dim;++i)sol[i]=w[i];
drum_poz(finish,dim);
}
}
int main()
{
ifstream f("subsir2.in");
f>>n;
for(i=1;i<=n;++i)f>>v[i];
for(i=1;i<=n;++i)
{
lmn=N;curr=0;
for(j=i-1;j>0;--j)
if(v[j]<=v[i] && d[j]<lmn && v[j]>v[curr])
{
lmn=d[j];
curr=j;
}
urmator[curr]=i;trecut[i]=curr;
if(curr)d[i]=lmn+1;
else d[i]=1;
}
curr=N;
for(i=1;i<=n;++i)
if(curr>d[i] && !urmator[i])
curr=d[i];
ofstream g("subsir2.out");
g<<curr<<'\n';
sol[1]=5000;
for(i=1;i<=n;++i)
if(d[i]==curr && !urmator[i])
{
drum(i,curr);
solve(curr,i);
}
for(i=1;i<=curr;++i)g<<p[i]<<" ";
return 0;
}