#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
using pii = pair<int,int>;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int nmax = 1e5 + 9;
int v[nmax] , dp[nmax] , p[nmax] , n , og[nmax];
pii aint[4*nmax];
void update(int nod , int st , int dr , int &val , int &acc, int &poz)
{
if(st == dr)
{
aint[nod] = {val,poz};
}
else
{
int mij = st + (dr-st)/2;
if(acc <= mij) update(nod*2,st,mij,val,acc,poz);
else update(nod*2+1,mij+1,dr,val,acc,poz);
if(aint[nod*2].first > aint[nod*2+1].first)
{
aint[nod] = aint[nod*2];
}
else aint[nod] = aint[nod*2+1];
}
}
pii query(int nod , int st , int dr , int &qdr)
{
if(dr <= qdr)
{
return aint[nod];
}
else
{
int mij = st + (dr-st)/2;
pii val = query(nod*2,st,mij,qdr);
if(mij < qdr)
{
pii asta = query(nod*2+1,mij+1,dr,qdr);
if(val.first > asta.first);
else val = asta;
}
return val;
}
}
void rec(int x)
{
if(x == 0) return;
rec(p[x]);
cout << og[x] << ' ';
}
signed main()
{
cin >> n;
for(int i = 1; i <= n ; ++i) cin >> v[i];
for(int i = 1 ;i <= n ;++i) og[i] = v[i];
vector <pii> norm;
for(int i = 1 ; i <= n ; ++i) norm.push_back({v[i],i});
sort(norm.begin(),norm.end(),[](pii a, pii b){return a.first < b.first;});
v[norm[0].second] = 2;
int mx = 0;
for(int i = 1 ; i < n ; ++i)
{
if(norm[i].first == norm[i-1].first)
{
v[norm[i].second] = v[norm[i-1].second];
}
else v[norm[i].second] = v[norm[i-1].second] + 1;
mx = v[norm[i].second];
}
for(int i = 1 ; i <= n ; ++i)
{
v[i]--;
pii prec = query(1,1,mx,v[i]);
v[i]++;
p[i] = prec.second;
dp[i] = prec.first + 1;
update(1,1,mx,dp[i],v[i],i);
}
mx = -1;
int poz = -1;
for(int i = 1 ; i <= n ; ++i)
{
if(dp[i] > mx)
{
mx = dp[i];
poz = i;
}
}
cout << mx << '\n';
rec(poz);
return 0;
}