#include <bits/stdc++.h>
using namespace std;
ifstream fin("sclm.in");
ofstream fout("sclm.out");
int A[1005],n,d[1005],k,P[1005];
void citire(){
fin>>n;
for(int i=1;i<=n;i++){
fin>>A[i];
}
}
int BinarySearch(int x){
int st=1,dr=k,mij,poz=k;
while(st<=dr){
mij=(st+dr)/2;
if(A[d[mij]]>=x){
dr=mij-1;
poz=mij;
}
else{
st=mij+1;
}
}
return poz;
}
int sclm(){
d[++k]=1;
P[1]=0;
for(int i=2;i<=n;i++){
if(A[d[k]]<=A[i]){
P[i]=d[k];
d[++k]=i;
}
else{
int de_inlocuit=BinarySearch(A[i]);
P[i]=d[de_inlocuit-1];
d[de_inlocuit]=i;
}
}
return k;
}
int main()
{
citire();
int k=sclm();
fout<<k<<"\n";
deque<int> dq;
int p=d[k];
while(p!=0){
dq.push_front(p);
p=P[p];
}
while(!dq.empty()){
int Front=dq.front();
dq.pop_front();
fout<<Front<<" ";
}
return 0;
}