#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <vector>
std::ifstream in("scmax.in");
std::ofstream out("scmax.out");
const int INF=2000000001;
const int N=100001;
std::set<int> s;
std::map<int, std::pair<int, int>> m;
int v[N];
int main()
{
int n, x;
s.insert(INF);
in>>n;
for(int i=1; i<=n; i++)
{
in>>x;
v[i]=x;
if(*s.begin()>=x)
{
s.insert(x);
//std::cout<<"Nu exista in sir numar mai mic de "<<x<<std::endl;
m.insert({x, {-1, 1}});
}
else
{
std::set<int>::iterator it=s.lower_bound(x);
int res=*std::prev(it);
s.insert(x);
m[x].first=res;
m[x].second=m[res].second+1;
//std::cout<<"Cel mai mare numar mai mic strict ca "<<x<<" este "<<res<<std::endl;
}
}
int max=-1, imax=1;
for(int i=1; i<=n; i++)
{
if(m[v[i]].second>max)
{
max=m[v[i]].second;
imax=i;
}
}
out<<m[v[imax]].second<<std::endl;
std::vector<int> vectr;
while(v[imax]!=-1)
{
//std::cout<<v[imax];
vectr.push_back(v[imax]);
v[imax]=m[v[imax]].first;
}
for(int i=vectr.size()-1; i>=0; i--)
{
out<<vectr[i]<<" ";
}
}