semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main(void)
{
 int num ;
 scanf("%d",&num);
 int a[num],flag[num];
 for (int i = 0; i < num; i ++)
 {
  scanf("%d",&a[i]);
  flag[i] = 1;
 }
 for (int i = 0; i < num; i ++)
 {
  for (int j = 0; j < i; j ++)
  {
   if (a[j] >= a[i])
   {
    flag[i] = flag[j] + 1 > flag[i] ? flag[j] + 1 : flag[i];
   }
  }
 }
 int max = flag[0];
 for (int i = 1; i < num; i ++)
 {
  if (flag[i] > max)
   max = flag[i];
 }
 printf("%d\n",max);
 return 0;
}
int k=0,n,a[26]={0};
const int y=1000000;
void lanjie(int i, int m,int h)
{
    if(i==n+1) 
	{
		if(m>k) k=m;
		return ;
	}
	if(m+n-i<k) return ;
	if(h>=a[i])
	    lanjie(i+1,m+1,a[i]);
	lanjie(i+1,m,h);
	return;
}


int main()
{
    int i;
	cin>>n;
	for(i=1;i<=n;i++)
		cin>>a[i];
	lanjie(1,0,y);
	cout<<k<<endl;
	
	return 0;
}
void main()
{
	int i,k,max,n;
	scanf("%d",&n);
	int h[25],m[25];
	for(i=0;i<=n-1;i++)
		scanf("%d",&h[i]);
	m[n-1]=1;
	max=m[n-1];
	for(i=n-2;i>=0;i--)
	{m[i]=1;
	for(k=i+1;k<=n-1;k++)
		if((h[i]>=h[k])&&(m[i]<1+m[k]))
			m[i]=m[k]+1;
		if(m[i]>max)
			max=m[i];
	}
	printf("%d",max);
}
int a[26];
int n;
int sum(int k,int b)
{
   int x;
   if (k==0)
   x=0;
   else if(k!=0)
   {
     if((a[n-k]<=b))
     {
        if((sum(k-1,a[n-k])+1)>=sum(k-1,b))
        {
          b=a[n-k];
          x=1+sum(k-1,b);
        }
        else
          x=sum(k-1,b);
        
     }
      else if ((a[n-k]>b))
      x=sum(k-1,b);
   } 
   return x;
}
main()
{
int i,j;
int c=9999;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i-1]);
}
printf("%d",sum(n,c));
}
void main()
{
	int k,i[26],a[26],b[26],x=0;
	scanf("%d",&k);
	for(i[0]=0;i[0]<25;i[0]++)b[i[0]]=0;
	for(i[0]=0;i[0]<k;i[0]++)scanf("%d",&a[i[0]]);
	for(i[0]=0;i[0]<k;i[0]++)
	{
		b[0]=a[i[0]];
		for(i[1]=i[0]+1;i[1]<=k;i[1]++)
		if ((b[1]=a[i[1]])<=b[0])
			for(i[2]=i[1]+1;i[2]<=k;i[2]++)
			if ((b[2]=a[i[2]])<=b[1])
			for(i[3]=i[2]+1;i[3]<=k;i[3]++)
			if ((b[3]=a[i[3]])<=b[2])
			for(i[4]=i[3]+1;i[4]<=k;i[4]++)
			if ((b[4]=a[i[4]])<=b[3])
			for(i[5]=i[4]+1;i[5]<=k;i[5]++)
			if ((b[5]=a[i[5]])<=b[4])
			for(i[6]=i[5]+1;i[6]<=k;i[6]++)
			if ((b[6]=a[i[6]])<=b[5])
			for(i[7]=i[6]+1;i[7]<=k;i[7]++)
			if ((b[7]=a[i[7]])<=b[6])
			for(i[8]=i[7]+1;i[8]<=k;i[8]++)
			if ((b[8]=a[i[8]])<=b[7])
			for(i[9]=i[8]+1;i[9]<=k;i[9]++)
			if ((b[9]=a[i[9]])<=b[8])
			for(i[10]=i[9]+1;i[10]<=k;i[10]++)
			if ((b[10]=a[i[10]])<=b[9])
			for(i[11]=i[10]+1;i[11]<=k;i[11]++)
			if ((b[11]=a[i[11]])<=b[10])
			for(i[12]=i[11]+1;i[12]<=k;i[12]++)
			if ((b[12]=a[i[12]])<=b[11])
			for(i[13]=i[12]+1;i[13]<=k;i[13]++)
			if ((b[13]=a[i[13]])<=b[12])
			for(i[14]=i[13]+1;i[14]<=k;i[14]++)
			if ((b[14]=a[i[14]])<=b[13])
			for(i[15]=i[14]+1;i[15]<=k;i[15]++)
			if ((b[15]=a[i[15]])<=b[14])
			for(i[16]=i[15]+1;i[16]<=k;i[16]++)
			if ((b[16]=a[i[16]])<=b[15])
			for(i[17]=i[16]+1;i[17]<=k;i[17]++)
			if ((b[17]=a[i[17]])<=b[16])
			for(i[18]=i[17]+1;i[18]<=k;i[18]++)
			if ((b[18]=a[i[18]])<=b[17])
			for(i[19]=i[18]+1;i[19]<=k;i[19]++)
			if ((b[19]=a[i[19]])<=b[18])
			for(i[20]=i[19]+1;i[20]<=k;i[20]++)
			if ((b[20]=a[i[20]])<=b[19])
			for(i[21]=i[20]+1;i[21]<=k;i[21]++)
			if ((b[21]=a[i[21]])<=b[20])
			for(i[22]=i[21]+1;i[22]<=k;i[22]++)
			if ((b[22]=a[i[22]])<=b[21])
			for(i[23]=i[22]+1;i[23]<=k;i[23]++)
			if ((b[23]=a[i[23]])<=b[22])
			for(i[24]=i[23]+1;i[24]<=k;i[24]++)
			if ((b[24]=a[i[24]])<=b[23])
			for(i[25]=i[24]+1;i[25]<=k;i[25]++)
			if ((b[25]=a[i[25]])<=b[24]);
	}
	for(i[0]=0;i[0]<25;i[0]++)if(b[i[0]]==0){printf("%d",i[0]-1);break;}
}
main()
{
	int i,j,k,l,a[26],len[26];
	scanf("%d",&k);
	for(i=0;i<k;++i)
		scanf("%d",&a[i]);
	for(i=0;i<k;++i)
		len[i]=1;
	for(i=1;i<k;++i)
	{
		for(j=0;j<i;++j)
			if(a[i]<=a[j])
			{
				len[i]=len[j]+1;
				break;
			}
		for(l=j+1;l<i;++l)
			if(len[l]>=len[i]&&a[i]<=a[l])
			{
				len[i]=len[l]+1;
				continue;
			}

	}
	for(i=0;i<k;++i)
		if(len[i]>len[0])
			len[0]=len[i];
	printf("%d",len[0]);
}
int a[29],max[29]={0},count[29]={0};
int N;
int select(int x)
{    if(count[x]==0)
    {
                        
     int i;
 for (i=x+1;i<=N;i++)
     {if (a[x]>=a[i])
       {if(max[x]<=select(i)){max[x] = select(i)+1;}
       }
       }   
        if(max[x]==0)
                     {max[x]=1;}   
        count[x]=1;
 }
 /*printf("%d ?  ?  %d?    ",x,max[x]);*/
return max[x];}

main()
{   int maxm;
    scanf("%d",&N);
    for(int j=1;j<=N;j++)
    {scanf("%d",&a[j]);
    } 
    maxm=select(1);
    for(int k=2;k<=N;k++)
    {if(maxm<select(k))
                       {maxm=select(k);}
    }  
     /*for(int j=1;j<=N;j++)
    {printf("%d ?  ?  %d?   \n",j,select(j)); 
    } */
      printf("%d",maxm);
      }
void main()
{
	int n,a[25],b[25]={0},i,j,max=0;
	scanf("%d",&n);
	for (i=0;i<=n-1;i++)
	{
		scanf("%d",&a[i]);
		b[i]=1;
	}
	
	for(i=1;i<=n-1;i++)
	{
		for (j=n-i;j<=n-1;j++)
		{
			if(a[n-1-i]>=a[j])
			{
				if(b[n-i-1]<b[j]+1)
				{
					b[n-i-1]=b[j]+1;
				}
			}
		}
	}
	for (i=0;i<=n-1;i++)
	{
		if(max<b[i]) max=b[i];
	}
	printf("%d",max);

}
int a[25],num[25]={0};
int main()
{
	int k=0,i,n;
	int search(int i,int n);
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=n-1;i>=0;i--)
	{
		num[i]=1+search(i,n);
	}
	for(i=0;i<n;i++)
	{
  		if(k<num[i])  k=num[i];
	}
	printf("%d",k);
	return 0;
}
int search(int i,int n)
{
	int p,q=0;
	for(p=i+1;p<n;p++)
	{
		if(a[p]<=a[i])
		{
			if(q<num[p])
               q=num[p];
		}
	}
	return q;
}
int max(int p[],int n)
{
	int t,m=0;
	m=p[0];
	p[0]=0;
	for(t=0;t<n;t++)
	{
		if (m<p[t])	m=p[t];
		p[t]=0;
	}
	return m;
}
int main ()
{
	int m,t,p=0,k,n;
	int c[25];
	scanf("%d",&m);
	int *a=(int*)malloc(m*sizeof(int));
	int *b=(int*)malloc(m*sizeof(int));
	for (t=0;t<m;t++)
	scanf("%d",&a[t]);
	b[m-1]=1;
	for(t=(m-2);t>(-1);t--)
	{
		for(n=(t+1);n<m;n++)
		{
			if (a[t]>=a[n]) 
			{
				c[p]=b[n];
				p++;
			}
		}
		b[t]=max(c,p)+1;
		p=0;
	}
	k=max(b,m);
	printf("%d",k);

}
int left(int *h,int i);

void main()
{
	int n,i,h[MAX],num,max;

	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",h+i);

	for(i=n-1;i>=0;i--){
		num=left(h,i);
		if(i==n-1)
			max=num;
		else if(num>max)
			max=num;
	}

	printf("%d\n",max);
}

int left(int *h,int i)
{
	int j,flag=0,num,max;

	if(i==0)
		return 1;
	else{
		for(j=i-1;j>=0;j--){
			if(*(h+j)>=*(h+i)){
				num=left(h,j)+1;
				if(flag==0){
					max=num;
					flag=1;
				}
				else if(num>max)
					max=num;
			}
		}
		if(flag==0)
			return 1;
		else
			return max;
	}
}
int main()
{
	int n;
	scanf("%d",&n);
	int a[25];
	scanf("%d",&a[0]);
	int i = 1;
	while(i<n)
	{
		scanf(" %d",&a[i]);
		i++;
	}
	int b[25];
	i = n-2;
	b[n-1] = 1;
	while(i>=0)
	{
		b[i] = 1;
		int m = i + 1;
		while(m<n)
		{
			if((a[m]<=a[i])&&(b[m]>=b[i]-1))
			{
				b[i] = b[m] + 1;
			}
			m++;
		}
		i--;
	}
	int k = 1;
	i = 0;
	while(i<n)
	{
		if(b[i]>k)
			k = b[i];
		i++;
	}
	printf("%d",k);
	return 0;
}
void main()
{
	int k;
	int n=1,i=0,j=0;
	scanf("%d", &k);
	int *a=(int *)malloc(k*sizeof(int));
	int *b=(int *)malloc(k*sizeof(int));
    for(i=0;i<k;i++)
	{
		scanf("%d", &a[i]);
		b[i]=1;
	}

	
 	for(i=k-1;i>=0;i--)
	{
		for(j=k-1;j>i;j--)
		{
			if(a[i]>=a[j])
				b[i]=b[i]>b[j]?b[i]:b[j]+1;
		
	
		}
	}
		
	
	for(i=0;i<k;i++)
	{
		n=n>b[i]?n:b[i];
	}
	printf("%d", n);
	free(a);
	free(b);



}
int k;
int h[30];
int r[30];
int main()
{
	cin>>k;
	int i,j;
	for(i=0;i<k;i++)
		cin>>h[i];

//	memset(h,0,sizeof(h));
//	memset(r,0,sizeof(r));

	r[k-1]=1;
	for(i=k-2;i>=0;i--)
	{
		if(r[i]>=r[i+1]){
			cout<<"first way taken"<<endl;
			r[i]=r[i+1]+1;
		}
		else
		{
			int max=0;
			for(j=i+1;j<k;j++)
			{
				if(h[j]<=h[i]&&r[j]>max)
					max=r[j];
			}
			r[i]=max+1;
		}
	}
	int ans=0;
	for(i=0;i<k;i++)
	{	
		//cout<<r[i]<<endl;
		if(r[i]>ans) ans=r[i];
	}
	cout<<ans;

}
int a[25];
int n;
int changdu(int i)
{
	int j,max;
	max=0;
	if(i==n-1)
	max=0;
	for(j=i+1;j<n;j++)
	{
		if(a[j]<=a[i])
	{
		if(changdu(j)>max)
		max=changdu(j);
	}
	}
	return(max+1);
	
}
int main()
{
	int max,i;
	max=0;
	
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
		if(changdu(i)>max)
		max=changdu(i);
	}
	printf("%d",max);
	
}
int k,a[26]={0},b[26]={0},max=0;

void num(int site,int height)
{
	int i,amount=0,h;
	if(site==k)
	{
		for(i=0;i<k;i++)
		{
			if(b[i]==1)
			{
				amount++;
			}				
		}
		if(max<amount) {max=amount;}
		
	}
	else
	{
		if(height<a[site])
		{
			num(site=site+1,height);
			site--;
		}//site++?????site??????????
		else
		{
			num(site=site+1,height);
			site--;
		    b[site]=1;h=height;
            height=a[site];
	    	num(site=site+1,height);
			site--;
			b[site]=0;height=h;
		}
			
	}
}

void main()
{
   int i;
   scanf("%d",&k);
   for(i=0;i<k;i++)
   {
	   scanf("%d",&a[i]);
   }
   num(0,30000);
printf("%d",max);

}
int a[30],n;
int max(int p,int q){
	if (p>=q) return p;
	else return q;
}
int shot(int x,int y){
	if (x==n){
		if (a[x]<=y)  return 1;
		else return 0;
	}
	else {
		if (a[x]>y) return (shot(x+1,y));
		else return (max(shot(x+1,y),shot(x+1,a[x])+1));
	}
}
int main(){
	int i,m=0;
	scanf("%d",&n);
	for (i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	m=shot(1,9999);	
	printf("%d",m);
	return 0;
}
int dd[25];
int k;
int maxnum = 0;

void fun(int p, int num,int hight)
{
	if(p > k)
	{
		if(num > maxnum)
			maxnum = num;
		return;
	}
	if(dd[p] <= hight)
	{
		fun(p + 1,num + 1,dd[p]);
		fun(p + 1,num,hight);
	}
	else
		fun(p + 1,num,hight);
	return;
}

int main()
{
	cin >> k;
	for(int i = 0;i < k;i++)
		cin >> dd[i];
	fun(0,0,65535);
	cout << maxnum - 1<< endl;
}
int count[30],hgt[30],n,i,j,max,temp;
void m(int s,int t);
void main()
{
	for(i=1;i<=25;i++){
		count[i]=0;
	}
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d",&hgt[i]);
		count[1]=1;
	}
	for(i=2;i<=n;i++){
		temp=0;
		for(j=1;j<i;j++){
			if(hgt[i]<=hgt[j]){
				if(temp<count[j]){
					temp=count[j];
				}
			}
		}
		count[i]=temp+1;
	}
	max=0;
	for(i=1;i<=n;i++){	
		if(max<count[i]){
			max=count[i];
		}
	}
	printf("%d\n",max);
}
int main()
{
   int n,i,j,*b,max,maxn=0,*a;
   scanf("%d",&n);
   a=(int *)malloc(sizeof(int)*n);
   b=(int *)malloc(sizeof(int)*n);
   for (i=0;i<n;i++)
     {
         scanf("%d",a+i);
         b[i]=0;
     }
   for (i=n-1;i>-1;i--)
   {
       max=0;
       for (j=n-1;j>i;j--)
         if (a[j]<=a[i]&&b[j]>=max)
           max=b[j];
       b[i]=max+1;
       if (b[i]>maxn)
         maxn=b[i];
   }
   printf("%d\n",maxn);
}
int aMaxLen[35];
int nTmp;
int main()
{
	int k,i;
	cin>>k;
	int b[25];
	for(i=0;i<k;i++)
		cin>>b[i];
		aMaxLen[1]=1;
	for(i=2;i<=k;i++)
	{
		int nTmp=0;
		for(int j=1;j<i;j++)
		{
			if(b[i]<b[j])
			{
				if(nTmp<aMaxLen[j])
					nTmp=aMaxLen[j];
			}
		}
		aMaxLen[i]=nTmp+1;
	}
	int nMax=-1;
	for(i=1;i<=k;i++)
		if(nMax<aMaxLen[i])
			nMax=aMaxLen[i];
	cout<<nMax<<endl;
	
	return 0;
}
int a[25]={0},n;
int main ()
{ int F (int x);
  int i,z=0;
  scanf("%d",&n);
  for (i=0;i<n;i++)
  scanf("%d",&a[i]);
  for (i=0;i<n;i++)
  if (z<F(i))   z=F(i);
  printf("%d\n",z);  
  
}
int F (int x)
{ 
    int i,z=1;
    for (i=x+1;i<n;i++)
    if ((a[x]>=a[i])&&(F(i)+1>z))      
    z=F(i)+1;
    return z;}
int main()
{
int n,i,j;
int a[100],b[100],bm=-1;
cin>>n;
for(i=0;i<100;i++) b[i]=1;
for(i=1;i<=n;i++)
{cin>>a[i];
for(j=1;j<i;j++) if(a[j]>=a[i]&&(b[j]+1)>b[i]) b[i]=(b[j]+1);
if(b[i]>bm) bm=b[i];
}

cout<<bm;


}
int main()
{
    int lj(int a[],int n,int m);
    int n,m,i,j,l,k=0,s,t=0,a[25],b[25];
    scanf("%d",&k);
    for(i=0;i<k;i++)
        scanf("%d",&a[i]);
    for(i=0;i<k;i++)
        b[i]=lj(a,i,k);
    for(i=0;i<k;i++)
        {
            if(t<b[i])
                t=b[i];
        }
    printf("%d",t);
    getchar();
    getchar();
    getchar();
}
int lj(int a[],int n,int m)//n????m??? 
{
    int i,t,p,l=0,b[25];
    if(n==m-1)
    return 1;
    else
    {
    for(i=0;i<25;i++)
        b[i]=0;
    for(i=n+1;i<m;i++)
        {
            if(a[i]<=a[n])
                    {
                          b[i]=lj(a,i,m);
                    }
        }
    t=b[n+1];
    for(i=n+1;i<m;i++)
        {
            if(t<b[i])
            t=b[i];
        }
    return t+1;
    }
}
int main()
{
	int n;
	scanf("%d",&n);
	int num_lanjie[25];
	int input[25];
	for(int i=0;i<=n-1;i++)
	{
		if(i==0)
		{
			scanf("%d",&input[i]);
		}
		else
		{
			scanf(" %d",&input[i]);
		}
	}
	//???????????num_lanjie????????????
	/*
	????????????????????????????????????????????????????????????????????????????
	*/
	num_lanjie[n-1]=1;
	for(int i=n-2;i>=0;i--)
	{
		int max=0;
		for(int j=n-1;j>i;j--)
		{
			if(input[i]>=input[j]&&max<num_lanjie[j])
			{
				max=num_lanjie[j];
			}
		}
		num_lanjie[i]=max+1;
	}
	//????num_lanjie????????
	int max=0;
	for(int i=0;i<=n-1;i++)
	{
		max=max>num_lanjie[i]?max:num_lanjie[i];
	}
	printf("%d",max);
	return 0;
}
int main(){
	int k,h[25],a[25][25] = {0};//a[i][j]???ij???????????????
	cin>>k;
	for (int i = 0; i < k; i++)
		cin>>h[i];
	int max = 1;
	for (int i = 0; i < k; i++)//???
		a[i][i] = 1;
	for (int i = 0; i < k - 1; i++)
		for (int j = i + 1; j < k; j++){
			a[i][j] = 1;
			for (int k = i; k < j; k++)
				if (h[k] >= h[j] && a[i][k] + 1 > a[i][j])
					a[i][j] = a[i][k] + 1;
			if(a[i][j] > max)
				max = a[i][j];
		}
	cout<<max<<endl;
	return 0;
}
int a[25],b[25]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
int n;
int changdu(int i)
{
    int j,max=1;
    if(b[i]!=1)
    return b[i];
    else
    {
    for(j=i+1;j<n;j++)
    {
                      if(a[i]>=a[j])
                      {
                                    b[i]=changdu(j)+1;
                                    if(b[i]>max)
                                    max=b[i];
                                    }
                                    }
    b[i]=max;
    return max;
}
}
main()
{
      int max=0,i;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      scanf("%d",&a[i]);
      for(i=0;i<n;i++)
      b[i]=changdu(i);
      for(i=0;i<n;i++)
      {
                      if(b[i]>max)
                      max=b[i];
                      }
      printf("%d",max);
      

      }
int num(int m[],int i,int k);
void main()
{
    int k,i,t,ans=0;
    int m[25];
    scanf("%d",&k);
    for(i=0;i<k;i++)
        scanf("%d",&m[i]);
    for(i=0;i<=k;i++){
        t=num(m,i,k);
        if(t>ans) ans=t;
    }
    printf("%d",ans);
}
int num(int m[],int i,int k)
{
    int re=0,j,t;
    if(i==k) return(0);
    for(j=i+1;j<=k;j++)
        if(m[j]<=m[i])
        {
            t=num(m,j,k);
            if(t>re) re=t;
        }
    re++;
    return(re);
}
int main()
{
	//freopen("in.txt","r",stdin);
	int i,j,N,anNum[MAX],anFlag[MAX];
	scanf("%d",&N);
	memset(anFlag,1,sizeof(anFlag));
	for (i=0;i<N;i++)
	{
		scanf("%d",&anNum[i]);
		anFlag[i]=1;
	}
	for (i=N-2;i>=0;i--)
	{
		int Max=0;
		for (j=i+1;j<N;j++)
		{
			if (anNum[i]>=anNum[j])
			{
				if (anFlag[j]>Max)
					Max=anFlag[j];
			}
		}
		anFlag[i]=Max+1;
	}
	int Max=0;
	for (i=0;i<N;i++)
		if (anFlag[i]>Max)
			Max=anFlag[i];
	printf("%d\n",Max);
	return 0;
}
main()
{
	int k[25],a[25];
 int i,j,n,max;
  scanf("%d",&n);
  for(i=0;i<n;i++)
	  a[i]=1;
  for(i=0;i<=n-1;i++)
  scanf("%d",&k[i]);
  for(i=n-2;i>=0;i--)
   for(j=i+1;j<=n-1;j++)
    if((k[j]<=k[i])&&(a[i]<=a[j]))
	 a[i]=a[j]+1;
  for(max=0,i=0;i<n;i++)
	  if(a[i]>=max) max=a[i];
	printf("%d",max);
}
int N,input[26],i,j,k,ans[26],Max;
int cons(int i){
   int a=0;
   if(ans[i]!=0)
     return ans[i];
   for(int j=i+1;j<N;j++){
     if(input[j]<=input[i])   
        if(a<cons(j))
           a=ans[j];   
   }
   ans[i]=a+1;
   return ans[i];
}
int main(){
    Max=0;
    scanf("%d",&N);
    for(i=0;i<N;i++){
       scanf("%d",&input[i]);
       ans[i]=0;
    }
    for(i=N-1;i>=0;i--){
        if(Max<cons(i))           
           Max=ans[i];
    }           
    printf("%d\n",Max);
    return 0;    
}
int main()
{
	int n,i,j,a[N],s[N],max=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
		s[i]=1;
    for(i=n-2;i>=0;i--)
		for(j=i+1;j<n;j++)
			if(a[j]<=a[i]&&s[i]<s[j]+1)
				s[i]=s[j]+1;
	for(i=0;i<n-1;i++)
		max=(max>s[i])?max:s[i];
    printf("%d",max);
	return 0;
}
main()
{
    int a[100],n,i,j,max[100],sum[100],final;
    final=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    for(i=0;i<n;i++)
    sum[i]=0;
    sum[n-1]=1;
    max[n-1]=a[n-1];
    for(i=n-2;i>=0;i--)
    {
        sum[i]=sum[n-1];
        max[i]=max[n-1];
        for(j=n-1;j>i;j--)
        {
            if(a[i]>=max[j]&&sum[i]<=sum[j]+1)
            {
                sum[i]=sum[j]+1;
                max[i]=a[i];
            }
        }
        if(sum[i]==1&&a[i]<max[i])
        max[i]=a[i];
    }
    for(i=0;i<n;i++)
    {
        if(final<=sum[i])
        final=sum[i];
    }
    printf("%d",final);
}
int main()
{
	int k;
	int d[25];
	int f[25];
	int max=0;

	scanf("%d",&k);

	for(int i=0;i<k;i++)
	{
		scanf("%d",&d[i]);
		f[i]=1;
	}

	while(1)
	{
		int tmp=0;
		int x=0;
		int y=0;

		int ci;
		for(ci=0;ci<k;ci++)
		{
			if(f[ci]==1)
			{
				y++;
				if(x==0)
				{
					tmp=d[ci];
					x++;
				}
				else
				{
					if(d[ci]<=tmp)
					{
						tmp=d[ci];
						x++;
					}
					else
						break;
				}
			}
		}

		if(x==y)
			if(x>max)
				max=x;

		int cnt;
		for(cnt=0;cnt<k;cnt++)
		{
			if(f[cnt]!=0) break;
		}
		if(cnt==k) break;

		f[k-1]--;
		for(int i=k-1;i>0;i--)
		{
			if(f[i]==-1)
			{
				f[i]=1;
				f[i-1]--;
			}
		}

	}

	printf("%d",max);

		return 0;
}
int main()
{
	int k, most;
	int a[25], f[25];
	cin >> k;
	for(int i = 0 ; i < k ; i++)
	{
		cin >> a[i];
	}
	f[0] = 1;
	for(int i = 1; i < k; i++)
	{
		most = 0;
		for(int j = 0; j < i; j++)
		{
			if(a[j] >= a[i])
			{
				if(f[j] > most)
				{
					most = f[j];
				}
			}
		}
		f[i] = most+1;
	}
	most = 0;
	for(int i = 0; i < k; i++)
	{
		if(f[i] > most)
			most = f[i];
	}
	cout << most << endl;
	return 0;
}
int k,n[25],h[25];

int main()
{
    cin>>k;
	int i,j;
	for(i=0;i<k;i++)
		cin>>h[i];
	memset(n,sizeof(n),0);
	int tem=0;
	for(i=0;i<k;i++)
	{
		tem=0;
       for(j=0;j<i;j++)
	   {
		   if(h[j]>=h[i])
		   {
			   if(n[j]>tem)
				   tem=n[j];
		   }
	   }
	   n[i]=1+tem;
	}
	tem=0;
	for(i=0;i<k;i++)
	{
		if(n[i]>tem)
			tem=n[i];
	}
	cout<<tem<<endl;
	return 0;
}
int main(int argc, char* argv[])
{
	int min[26];
	int data[26];
	int N;
	int i , j;
	int minLength;
	scanf("%d" , &N);
	for(i = 0 ; i < N ; i++)
	{
		scanf("%d" , &data[i]);
	}
	min[0] = 1;
	for (i = 1 ; i < N ; i++)
	{
		minLength = 0;
		for (j = 0 ; j < i ; j++)
		{
			if (data[i] <= data[j])
			{
				if (min[j] > minLength)
				{
					minLength = min[j];
				}
			}
		}
		min[i] = minLength + 1;
	}
	//zhaozuixiao
	minLength = 0;
	for (i = 0 ; i < N ; i++)
	{
		if (min[i] > minLength)
		{
			minLength = min[i];
		}
	}

	printf("%d\n" , minLength);
	return 0;
}
int main()
{
	int i, j, n, num[100], mark[100] = {0}, max;
	cin >> n;
	for (i = 0; i < n; i ++)
	{
		cin >> num[i];
	}
	mark[n - 1] = 1;
	for (i = n - 2; i >= 0; i --)
	{
		max = 0;
		for (j = i + 1; j < n; j ++)
		{
			if (num[j] <= num[i] && mark[j] > max)
			{
				max = mark[j];
			}
		}
		mark[i] = max + 1;
	}
	max = 0;
	for (i = 0; i < n; i ++)
	{
		if (mark[i] > max)
		{
			max = mark[i];
		}
	}
	cout << max << endl;
	return 0;
}
int main()
{
	int p[26]={0},q[26]={0},a=0,b,c,d,e,f,g,i,j,k,l,m,n;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{scanf("%d",&p[i]);}
	q[k-1]=1;
	for(i=k-2;i>=0;i--)
	{
		b=1;	
		for(j=i+1;j<k;j++)
		{
			if(p[i]>=p[j]) { if(q[j]+1>b) b=q[j]+1; }
		}
		q[i]=b;
	}
	for(i=0;i<k;i++)
	{if(a<q[i]) a=q[i];}
	printf("%d\n",a);
return 0;
}
void main()
{
	int a[25],b[25];
	int i,j,k;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&a[i]);
		b[i]=1;
	}
	for(i=k-2;i>=0;i--)
	{
		for(j=i+1;j<=k-1;j++)
		{
			if(a[i]>=a[j])
			{
				if(b[j]>=b[i])
					b[i]=b[j]+1;
			}
		}
	}
	for(i=0;i<k-1;i++)
	{
		if(b[i]>b[i+1])
		{
			j=b[i];
			b[i]=b[i+1];
			b[i+1]=j;
		}
	}
	printf("%d\n",b[k-1]);
}
int main()
{
	int i,j,k;
	int max=0;
	int maxall=1;
	int num[10000];
	int hight[10000];
	cin>>k;
	for(i=0;i<k;i++)
	{
		cin>>hight[i];
		num[i]=0;
	}
	num[0]=1;
	for(i=1;i<k;i++)
	{
	  max=1;
      for(j=0;j<i;j++)
	  {
		  if( hight[j]>=hight[i] && max<num[j]+1 )
			  max= num[j]+1;
	  }
	  num[i]= max;
	  if( num[i]>maxall ) maxall = num[i];
	}
	cout<<maxall<<endl;
	return 0;
}
int a[25],num;
int b[25];
int i,j,k;

int main(){
  cin>>num;
  for(i=0;i<num;i++){
    cin>>a[i];
    b[i]=1;
  }
  int max =0;
  b[0]=1;
  for(i=1;i<num;i++){
     for(j=i-1;j>=0;j--){
       if(a[j]>=a[i]){
          k = b[j]+1;
          if(k>b[i]){
            b[i] = k;
            if(k>max){
               max =k;
            }
          }
       }
     }
  }
  cout<<max<<endl;
  return 0;
}
main()
{
      char g;
      int c,d,f,a[25],b[25],k,e[25];
      e[0]=1;
      scanf("%d",&k);
      for (c=0; ;c++)
      {
      scanf("%d%c",&a[c],&g);
      if (g!=' ')
      break;
      else ;
      } 
      for (c=0;c<=k-1;c++)
      {b[c]=a[k-1-c];}
       
      for(c=1;c<=k-1;c++)
      {
          for(d=0,e[c]=0;d<=c-1;d++)
          {
           if (b[c]>=b[d] && e[c]<=e[d])
           e[c]=e[d];
           else ;
          }
          e[c]++;
      }
     // for (c=0;c<=k-1;c++)
     // {
     // printf("%d ",e[c]);
     // }
 for (c=0,f=e[0];c<=k-1;c++)
      {
      if (f<=e[c])
      f=e[c];
      else ;
      }
      printf("%d",f);
}
int k;
int set(int i);
int num=0;
int currH=100000;
int MaxNum=0;
int a[100];
int b[100];
int main()
{
	int i;
	for(i=0;i<100;i++)
	{
		b[i]=0;
	}
	cin>>k;
	for(i=0;i<k;i++)
	{
		int j;
		cin>>j;
		a[i]=j;
	}
	set(0);
	cout<<MaxNum;
	return 0;
}

int set(int i)
{
	int lastNum=num;
	int lastcurrH=currH;
	if(i==k-1)
	{
		if(a[i]<=currH) num++;
		if(num>MaxNum) MaxNum=num;
		num=lastNum;
		currH=lastcurrH;
		return 0;
	}
		if(b[i]==0)  set(i+1);
	b[i]++;


	if(b[i]==1)    
	{
		if(a[i]<=currH) { currH=a[i];  num++;}
		set(i+1);
	}


	num=lastNum;
	currH=lastcurrH;
	b[i]=0;
	return 0;
}
int a[100];

int f(int a[],int n,int min)
{
	if(n==1)
	{
		if(a[0]>=min)  return (1);
		else return(0);
	}
	else
	{
		if(a[n-1]<min) return(f(a,n-1,min));
		else if(f(a,n-1,a[n-1])+1<f(a,n-1,min))
			return(f(a,n-1,min));
		else return(f(a,n-1,a[n-1])+1);
	}
}



int main()
{
	int n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	int result;
	result=f(a,n,0);
	printf("%d",result);
	return 0;}
int xxx(int high,int j);
int max(int b,int c)
{
	if(b>=c) return b;
	else return c;
} 
int n;
int x[26];
int main()
{
	int i;
	int m,k;
	scanf("%d",&n);
	int h[n];
	for(i=0;i<n;i++)
	{
		scanf("%d",&h[i]);
		x[i]=h[i];
		//printf(" %d",x[i]);
	}
	for(i=n;i<26;i++) x[i]=999999;
	int fly;
	fly=xxx(999999,0);
	printf("%d",fly);
	
}
int xxx(int high,int j)
{
	if(j==n-1)
	{
		if(high>=x[j]) return 1;
		else return 0;
	}
	else
	{
		if(high<x[j]) return xxx(high,j+1);
		else return max(1+xxx(x[j],j+1),xxx(high,j+1));
	}
}
int n;
int a[29] = {~0U>>1}, f[29] = {0};
int ans = 0;

int main () {
    scanf ("%d", &n);
    for (int i = 1; i <= n; ++i) {
        scanf ("%d", &a[i]);
	}
	
	for (int i = 1; i <= n; ++i) {
		for (int j = 0; j < i; ++j) {
			if (a[i] <= a[j] && f[i] < f[j]+1) {
				f[i] = f[j]+1;
			}
		}
		
		if (f[i] > ans) {
			ans = f[i];
		}
	}
	
	printf ("%d\n", ans);
	return 0;
}
main ()
{
     int k;
     scanf ("%d",&k);
     int(*p)=(int *)malloc(k*sizeof(int));
     int(*q)=(int *)malloc(k*sizeof(int));
     int i,j,t;
     for (i=0;i<k;i++)
     {
         scanf ("%d",&p[i]);
         q[i]=1;
     }
     for (i=0;i<k;i++)
     for (j=0;j<i;j++)
     {
         t=0;
         if (p[j]>=p[i])
         {
                        t=q[j]+1;
                        if (t>=q[i])
                        {
                                   q[i]=t;
                        }
         }
     }
     int max=0;
     for (i=0;i<k;i++)
     {
         if (q[i]>max)
         {max=q[i];}
     }
     printf("%d",max);
}
int main() { 
	int b[26],k,h[26],t,i,j; //h[26]??????
	scanf("%d",&k); 
	for(i=1;i<=k;i++) 
		scanf("%d",&h[i]);
	for(i=1;i<=k;i++) {
		for(j=1,t=0;j<i;j++) 
			if(h[j]>=h[i]) 
				if(b[j]>t) t=b[j];
		if(t==0) b[i]=1;
		else b[i]=t+1;
	} 
	for(i=1,t=0;i<=k;i++) 
		if(b[i]>t) t=b[i];
	printf("%d",t); 
	return 0;
}
int main()
{
	int k;
	cin>>k;
	int h[50];
	int i,j;
	for(i=0;i<k;i++) cin>>h[i];
	int num[50],max;
	num[0]=1;
	for(i=1;i<k;i++)
	{
		max=0;
		for(j=0;j<i;j++)
		{
			if(h[j]>=h[i]&&num[j]>max) max=num[j];
		}
		num[i]=max+1;
	}
	max=0;
	for(i=1;i<k;i++)
	{
		if(num[i]>max) max=num[i];
	}
	cout<<max<<endl;
	return 0;
}