include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N=1010;
int a[N],f[N],g[N];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i) cin>>a[i];
for(int i=1;i<=n;i)
{
f[i]=1;
g[i]=0;//把每一个先初始化为0
for(int j=1;j<i;j)
{
if(a[j]<a[i])
{
if(f[i]<f[j]+1)
{
f[i]=f[j]+1;//取最大值
g[i]=j;//记录答案序列中现在这个数的上一个数的下标 即g[7]=6,g[6]=3,g[3]=2,g[2]=0;
}
}
}
}
int k=1;//初始化为1
for(int i=1;i<=n;i)
if(f[k]<f[i]) k=i;//更新k ,从而求出最大序列结尾那个数的下标
cout<<f[k]<<endl;//输出最大序列长度
for(int i=0,len=f[k];i<len;i++)//len用得很深奥。先把最大序列长度用len固定,并作为循环下界,否则f[k]一直会变化,就有问题,也就意味着不能直接写成i<f[k]
{
cout<<a[k]<<” “;//依次逆序输出答案
k=g[k];//更新下标,定位下一个被输的数
}
return 0;
}