semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int n,i;
int h[26];
int max(int a,int b)
{
	if(a>b)
		return a;
	else
		return b;
}

int f(int t,int l)
{
	if(t==1)
	{
		if(h[1]>=l)
			return 1;
		else
			return 0;
	}

    else if(h[t]<l)
		return f(t-1,l);
	else
		return max(f(t-1,l),f(t-1,h[t])+1);

}

	void main()
{
		scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&h[i]);

	printf("%d",f(n,0));
}
int main()
{
	int k;
	int a[100]={0};
	int f[100]={0};
	a[0]=100000;
	cin >> k;
	int i,j;
	int max=0;
	for(i=1;i<=k;i++)
	{
		cin >> a[i];
		for(j=0;j<i;j++)
		{
			if(a[j]>=a[i])
			{
				if(f[i] < f[j] + 1)
				{
					f[i]=f[j]+1;
				}
			}
		}
		if(max<f[i])
		{
			max=f[i];
		}
	}
	cout << max << endl;
}
int main()
{
    int k=0,count=0;
    int count1=0,count2=0;
    int max=0;
    int num[25][2];
    
    scanf("%d",&k);
    for(count=0;count<k;++count)
    {
        scanf("%d",&num[count][0]); 
        num[count][1]=0;   
    }    
    for(count1=0;count1<k;++count1)
    {
        max=0;
        for(count2=0;count2<count1;++count2)
        {
            if(num[count2][1]>= max && num[count2][0]>=num[count1][0]) 
            {
                max = num[count2][1];
                num[count1][1]=max+1;    
            }        
        }   
    }
    max = 0;
    for(count=0;count<k;++count)
    {
        if(num[count][1]>=max)
        {
            max = num[count][1];    
        }    
    }
    printf("%d",max+1);
}
int maxnum(int*a,int n,int up){
	if(n==0)return 0;
	int i,max=-1,t;
	for(i=0;i<n;i++){
		t=up;
		if(a[i]<=up||up==-1)t=a[i];
		else continue;
		if(maxnum(a+i+1,n-1-i,t)>max)max=maxnum(a+i+1,n-i-1,t);
	}
	return max+1;
}

int main(){
	int i,n,a[25];
	cin>>n;
	for(i=0;i<n;i++)cin>>a[i];
	cout<<maxnum(a,n,-1);
}
main()
{
    int k;
    int a[26]={0},b[26]={0};
    int i,j,r;
    scanf("%d",&k);
    for(i=1;i<=k;i++)
        scanf("%d",&a[i]);
    for(i=k;i>=1;i--)
    {
        r=0;
        for(j=i;j<=k;j++)
        {
            if(a[i]>=a[j])
                r=b[j]+1;
            if(b[i]<r) b[i]=r;
        }
    }
    r=0;
    for(i=1;i<=k;i++)
        if(b[i]>r) r=b[i];
    printf("%d",r);
}
int main()
{
	int n,m[25]={0},i,d[25]={1},dm=0,mm,j;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&m[i]);
	for(i=0;i<n;i++)
		d[i]=1;
	for(i=n-1;i>=0;i--)
		for(j=i+1;j<n;j++)
			if(m[i]>=m[j]&&d[i]<=d[j])
				d[i]=d[j]+1;
	dm=d[0];
	for(i=0;i<n;i++)
		if(d[i]>dm)
			dm=d[i];
	printf("%d",dm);
	scanf("%d",&i);
	return 0;
}
void main()
{
	int n,i,j,a[1000],b[1000],max=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		b[i]=1;
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
		for(j=0;j<i;j++)
			if(a[j]>=a[i])
				b[i]=MAX(b[j]+1,b[i]);
    for(i=0;i<n;i++)
		max=MAX(max,b[i]);
	printf("%d\n",max);
}
void main() 
{ 
int k,m,i,j,t; 
int a[26],b[26],c[26];
scanf("%d",&k); 
for(i=0; i<k; i++) 
scanf("%d",&a[i]); 
b[0]=1; 
for(i=1; i<k; i++) 
for(j=0; j<i; j++) 
{ 
if(a[i]<=a[j]) 
c[j]=b[j]+1; 
else 
c[j]=1; 
for(m=j; m>0; m--) 
{ 
if(c[m]>=c[m-1]) 
{ 
t=c[m-1]; 
c[m-1]=c[m]; 
c[m]=t; 
}
} 
b[i]=c[0];
}

for(i=k-1; i>0; i--) 
if(b[i]>=b[i-1]) 
{ 
t=b[i-1]; 
b[i-1]=b[i]; 
b[i]=t; 
            }
printf("%d",b[0]);
}
//?????????????(?????)
int result[40];//result[i]???a[i]????????????????
int max(int a,int b)
{
    if(a>b) return a;
    else return b;
}
void f(int a[],int n)
{
    /*??a[i]??????result?????result[j]???result[i]=1+result[j]*/
    int i,j,maxmium;
    result[1]=1;
    for(i=2;i<=n;i++)
    {
                     maxmium=0;
                     for(j=1;j<i;j++)
                     {
                                     if(a[j]>=a[i]) maxmium=max(result[j],maxmium);
                     }
                     result[i]=1+maxmium;
    }
}
                     
                     
                     
main()
{
      int n,i,outcome=0;
      scanf("%d",&n);
      int a[40];
      for(i=1;i<=n;i++)
      {
                       scanf("%d",&a[i]);
      }
      f(a,n);
      for(i=1;i<=n;i++)
      outcome=max(outcome,result[i]);
      printf("%d\n",outcome);
}
int analyse(int *,int *,int,int);
int main()
{
	int k;
	int height[25],numbers[25]={0};
	int i,max,temp;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",height+i);
	max=numbers[24]=1;
	for(i=23;i>=0;i--)
	{
		temp=analyse(height,numbers,i,k);
		if(temp>max)	max=temp;
	}
	printf("%d\n",max);
	return 0;
}
int analyse(int *height,int *numbers,int seq,int k)
{
	int max=0,temp,i;
	for(i=k-1;i>seq;i--)
	{
		if(height[seq]>=height[i])
		{
			temp=numbers[i];
			if(temp>max) max=temp;
		}
	}
	max++;
	numbers[seq]=max;
	return max;
}
int main()
{
	struct
	{
		int h,r;
	}a[30];
	int i,j,m,n,k=1;
	scanf("%d",&n);
	for (i=0;i<n;i++)
	{
		scanf("%d",&a[i].h);
		a[i].r=1;
	}
	for (i=n-1;i>=0;i--)
	{
		for (j=i+1;j<n;j++)
		{
			if ((a[i].h>=a[j].h) && (a[i].r<=(a[j].r+1)))
				a[i].r=a[j].r+1;
		}
	}
	for (i=0;i<n;i++)
	{
		if (k<=a[i].r)
			k=a[i].r;
	}
	printf("%d\n",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);



}
void main()
{
	int k,i,j,h[25]={0},n[25]={1},num;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&h[i]);
	for(i=k-2;i>=0;i--)
	{	for(j=i+1;j<k;j++)
		{
			if(h[i]>=h[j]&&n[i]<n[j]+1)
				n[i]=n[j]+1;
		}
	}
	num=n[0];
	for(i=0;i<k;i++)
	{
		if(num<n[i])
			num=n[i];
	}
	printf("%d",num+1);

}
int max(int t1[],int t2[],int m,int n,int d)
{
    int i,y=0;
    for(i=m+1;i<n;i++)
    {               
       if(t1[i]<=d&&t2[i]>y)
       y=t2[i];                  
    }
    return  y;    
}
main()
{
      int a[10000],b[10000]={0},i,j,n,t,x=0;
      scanf("%d",&n);
      for(i=0;i<n;i++)
          scanf("%d",&a[i]);
      b[n-1]=1;    
      for(i=n-2;i>=0;i--)
      {
          b[i]=max(a,b,i,n,a[i])+1;
      } 
      for(i=0;i<n-1;i++)
      {
         if(b[i]>x)
         x=b[i];                
      } 
    printf("%d",x);
     
}
int main(){
	int k;
	int temp=0;
	int max=1;
	int z=0;
	cin>>k;
	int a[30];
	int b[30]={0};
	for (int i=0;i<k;i++){
		cin>>a[i];
	}
	b[0]=1;
	for (int i=1;i<k;i++){
		for(int j=0;j<i;j++){
			if(a[j]>=a[i]){
				temp=b[j]+1;
				if(max<temp){
					max=temp;
				}
			}
		}
		b[i]=max;
		if(max>z){
			z=max;
		}
		max=1;
	}
	cout<<z;
	return 0;
}
int*p;
int n;
int max(int t,int k)
{
    if(t>k) return t;
    else return k;
    }
int pd(int i,int h)
{   if(i==n)   return 0;
    if(p[i]>h) return pd(i+1,h);
    if(p[i]==h) return pd(i+1,h)+1;
   return max(pd(i+1,p[i])+1,pd(i+1,h));
    }
int main()
{
    int i,j,k;
    scanf("%d",&n);
    p=(int*)malloc(n*sizeof(int));
    for(i=0;i<n;i++)
    scanf("%d",&p[i]);
    k=pd(0,800000);
    printf("%d",k);
    free(p); 
}
main()
{
      int k,m,n,s,i,max,j,c=0;
      int a[26],b[26];
      
     scanf("%d",&k);
     
      for(i=0;i<=k-1;i++)
     scanf("%d",&a[i]);
      b[k-1]=0;
     
      for(i=k-2;i>=0;i--)
       
       {
                        b[i]=0;
                        max=0;
              for(j=i+1;j<k;j++)
                      {
                                 if (a[i]>=a[j])
                                 {
                                   b[i]=b[j]+1;
                                   if (b[i]>max)
                                    max=b[i];
                                 }
                      }
                  
                  b[i]=max;
                  if (b[i]>=c)
                  c=b[i];
       } 
       printf("%d",c+1);
}
int main()
{
	int n , a[30] , b[30] = {0} ,max = 0 , flag = 0;
	cin>>n;
	for( int i = 1 ; i <= n ;i++)
	{
		cin>>a[i];
	}
	for( int j = n, k ; j >= 1 ; j--)
	{
		max = 0;
		flag = 0;
		for(  k = j ; k <= n ;k++)
		{
			if( a[j] >= a[k] )
			{
				flag = 1; 
			 if( b[k] >= max)
			 {
				 max = b[k];
			 }
			}
		}
		if( flag )
		{
			b[j] = max + 1;
		}
		else
		{
			b[j] = max;
		}
		
	}
	for( int i = 1 ; i <= n ; i ++)
	{
		if( b[i] >= max )
		{
			max = b[i];
		}
	}
	cout<<max<<endl;
	return 0;
}
int main()
{
	int k,height[25],start[25],max=0,h,i,j,q; //start[i]????i????????????????????????i??
	scanf("%d",&k);   //???????
	for(h=0;h<k;h++){
		scanf("%d",&height[h]);  //?????????
		start[h]=1;  //????1???start[i]???1,???i????
	}
	for(i=k-2;i>=0;i--){   //??????start[i]?start[k-1]???1???????????????????????
		for(j=i+1;j<k;j++){   //??????????????????
			if(height[j]<=height[i]&&start[j]+1>start[i]){   //?????start[j]+1>start[i]???start[j]??????i??????????????start[i]
				start[i]=start[j]+1;   //start[i\j]??1?????????????????????start[i]
			}
		}
	}
	for(q=1;q<k;q++){
		if(start[q]>start[max]){   //??????????????????????
			max=q;
		}
	}
	printf("%d",start[max]);
	return 0;
}
int main()
{
	int n,i,j,num;
	int hei[30],max[30];
	cin >> n;
	for(i = 0; i < n;i ++)
	{
		cin >> hei[i];
		max[i] = 1;
	}
	for(i = 0; i < n;i++)
	{
		num = 0;
		for(j = 0; j < i ;j++)
		{
			if(hei[j] >= hei[i])
			{
				if(max[j] > num)
					num = max[j];
			}
		}
		max[i] = num + 1;
	}
	num = 0;
	for(i = 0;i < n;i++)
	{
		if(max[i] > num)
			num = max[i];
	}
	cout << num << endl;
	return 0;
}
int num[30];
int dst[30];

int main()
{
	memset(dst, 0, sizeof(dst));
	int n;
	int ans;
	cin>>n;
	for(int i = 0; i < n ; i++)
	{	
		cin>>num[i];
	}
	dst[0] = 1;
	int temp, max;
	for(int i = 1; i < n; i++)
	{
		max = 1;
		for(int j = 0; j < i; j++)
		{
			
			if(num[i] <= num[j] )
			{
				temp = dst[j] + 1;
				if(max < temp)
					max = temp;
			}
		}
		dst[i] = max;
	}
	max = 0;
	for(int i= 0; i < n; i++)
	{
		//cout<<dst[i]<<" ";
		if(max < dst[i])
			max = dst[i];
	}

	cout<<max;
	return 0;
}
int main()
{
	int n,i,height[30],num[30],j,max = -1;
	cin>>n;
	for (i = 0;i < n;i++)
		cin>>height[i];
	for (i = 0;i < n;i++)	
		num[i] = 1;
	

	for (i = 1;i < n;i++)
		for (j = i-1;j >=0 ;j--)
		{
			if (height[j]>=height[i]&& num[j]+1 > num[i])
				num[i] = num[j] + 1;
				
			
		}
	for (i = 1;i < n;i++)
		if(num[i]>max)
			max = num[i];
	cout<<max<<endl;
	

}
void main()
{
	int n,h[25],d[25],i,j,max;
	scanf("%d",&n);
	for(i=0;i<n;i++) scanf("%d",&h[i]);
	d[n-1]=1;
	for(i=n-2;i>=0;i--)
	{
		d[i]=1;
		for(j=i+1;j<n;j++)
		{
			if(d[j]+1>d[i]&&h[j]<=h[i]) d[i]=d[j]+1;
		}
	}
	max=d[0];
	for(i=0;i<n;i++)
	{
		if(d[i]>max) max=d[i];
	}
	printf("%d",max);
}
main()
{
	int k,i,a[25+10],n[25+10],s;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&a[i]);
		n[i]=1;
	}
	for(i=k-2;i>=0;i--)
	{
		int j;
		for(j=i+1;j<=k-1;j++)
		{
			if((a[i]>=a[j])&&(n[i]<=n[j]))n[i]=n[j]+1;		
		}
	}
	s=n[0];
	for(i=0;i<k;i++)
	{
		if(n[i]>s)s=n[i];
	}

	printf("%d",s);
	return 0;
}
int max(int a[],int m);
int s[30]={0};
void main()
{
	int a[100],k,i,n;
	scanf("%d",&k);
	for(i=k;i>0;i--)
		scanf("%d",&a[i]);
	a[k+1]=10000;
	n=max(a,k+1);
	printf("%d\n",n-1);
}


int max(int a[],int m)
{
	int x,i,t=0;
	x=a[m];
	if(m==1)
		return(1);
	else
	{
		for(i=m-1;i>0;i--)
		{
			if(x>=a[i]&&max(a,i)>t)
				t=max(a,i);
		}
		return(t+1);
	}
}
int main()
{
	int s[25],i,j,a[25],n,max;
	cin>>n;
	for (i=0;i<n;i++)
	{
		cin>>a[i];
		s[i]=1;
		max=0;
		for (j=0;j<i;j++)
			if (a[j]>=a[i]&&s[j]>max) max=s[j];
		s[i]+=max;
	}
	max=0;
	for (i=0;i<n;i++)
		if (max<s[i]) max=s[i];
	cout<<max;
	return 0;
}
int main()
{
	int a[30],count=0,n,temp,i;
	cin>>n;
	while(n--)
	{
		cin>>temp;
		for(i=0;i<count;i++)if(temp>a[i]){a[i]=temp;break;}
		if(i>=count){a[i]=temp;count++;}
	}
	cout<<count<<endl;
	return 0;
}
void main()
{
	int n,high[30],point,m,sum1,sum2,check;
	scanf("%d",&n);
	for (m=0;m<n;m++)
		scanf("%d",&high[m]);
	for(check=1;check==1;)
	{
		check=0;
		for(point=0;point<n-1;point++)
		{
		if(high[point]<high[point+1])
		{
			check=1;
			for(m=0,sum1=0;m<point;m++)
				if(high[m]<high[point+1]) sum1++;
			for(m=point+2,sum2=0;m<n;m++)
				if(high[m]>high[point]) sum2++;
			if(sum1>sum2)
			{
				for (m=point+1;m<n-1;m++)
				{
					high[m]=high[m+1];
				}
			}
			else
			{
				for (m=point;m<n-1;m++)
				{
					high[m]=high[m+1];
				}
				point--;
			}
			n--;
		}
		}
	}
	printf("%d\n",n);
}
int c[25], d[25], k;
int D(int a)
{
	int m = 1;
	for (int i = a + 1; i <= k - 1; i ++)
		if (c[i] <= c[a] && m < D(i) + 1)
			m = D(i) + 1;
	return m;
}

int main()
{
	int max = 0;
	cin >> k;
	for (int i = 0; i < k; i ++)
		cin >> c[i];
	for (int i = k - 1; i >= 0; i --)
	{
		d[i] = D(i);
		if (d[i] > max)
			max = d[i];
	}
	cout << max;
	return 0;
}
main()
{
      int k,n_max,i;
      int a[25];
      scanf("%d",&k);
      int n[k];
      for(i=0;i<k;i++)
      {
             scanf("%d",&a[i]);
             n[i]=1;
      }
      for(int j=k-2;j>=0;j--)
      {
            for(int t=j+1;t<k;t++)
            {
                   if(a[t]<=a[j]&&n[j]<=n[t])
                         n[j]=n[t]+1;
            }              
      }
      n_max=0;
      for(int p=0;p<k;p++)
      {
             if(n[p]>n_max)
                   n_max=n[p];
      }      
      printf("%d\n",n_max);
      
}
int main()
{
	int m,n,i,j,k,c;
	scanf("%d",&n);
	int *a=(int *)malloc(n*sizeof(int));
	int *b=(int *)malloc(n*sizeof(int));
	for(i=0;i<n;i++)
	{
		a[i]=0;
		b[i]=0;
	}
	for(i=0;i<n;i++)
	{
	    scanf("%d",&a[i]);
	}
	b[n-1]=1;
	for(i=n-2;i>=0;i--)
	{
		for(j=i+1;j<n;j++)
		{
			if(a[i]>=a[j]&&b[j]>b[i])
			{
				b[i]=b[j];
			}
		}
		b[i]++;
		if(i==0)
		{break;}
	}
	k=0;
	c=b[0];
	for(i=1;i<n;i++)
	{
		if(b[i]>c)
		{
			k=i;
			c=b[i];
		}
	}
	printf("%d",b[k]);
}
int main()  
{  
    int h[25],n,i,j,t,d[25]={0},max=0,in;  
    scanf("%d",&n);  
    for(i=0;i<n;i++)  
    {  
        scanf("%d",&h[i]);  
    } 
    for(i=n-2;i>=0;i--)  
    {  
        for(j=i+1;j<n;j++)  
        {  
            if(h[j]<=h[i]&&d[i]<d[j]+1)   
                d[i]=d[j]+1;   
        }  
    }  
    for(i=0;i<n;i++)  
    {  
        if(d[i]>max)  
        {  
            max=d[i];  
        }  
    }  
    printf("%d",max+1);  
}
int missle[25];
int n;
int Intercept(int i,int j){
	int k,max=1,sum=1;
	for(k=i+1;k<j;k++){
		if(missle[k]<=missle[i]&&missle[k]>=missle[j])
			sum=Intercept(k,j)+1;
		else continue;
		if(sum>max)max=sum;
		sum=1;
	}
	return max;
}
void main()
{
	int i,j,max=1,sum=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&missle[i]);
	for(i=0;i<n;i++){
		for(j=i+1;j<n;j++){
			if(missle[j]<=missle[i]){
				sum=Intercept(i,j)+1;
			}
			else continue;
		    if(sum>max)max=sum;
		    sum=0;
		}
	}
	printf("%d\n",max);
}
void main()
{
	int j,i,k,f[25],a[25];
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d ",&a[i]);
		f[i]=1;
	}
	for(i=k-2;i>=0;i--)
	{
		for(j=k-1;j>=i+1;j--)
		{
			if(a[i]>=a[j]&&f[i]<=f[j])
				f[i]=f[j]+1;
		}
	}
	
		for(j=0+1;j<k;j++)
		{
			if(f[0]<f[j])
			{
				f[0]=f[j];
			}
		}
		printf("%d",f[0]);
			
}
main ()
{
     int n,m,i,j,k,t;
     scanf ("%d",&n);
     int *p=(int *)malloc(n*sizeof(int));
     int *q=(int *)malloc(n*sizeof(int));
     int *a=(int *)malloc(n*sizeof(int));
     for (i=0;i<n;i++)
     {
              scanf ("%d",&p[i]);
     }
     for (i=0;i<n;i++)
     {
              q[i]=1;
     }
     for (i=1;i<n;i++)
     {
         t=0;
         for (j=0;j<n;j++)
         {a[j]=0;}
         for (j=0;j<i;j++)
         {
               if (p[j]>=p[i])
               {
                   a[j]=q[j];
               }
               for (k=0;k<i;k++)
               {
                   if (a[k]>t)
                       {
                           t=a[k];
                       }
               }
         }
            q[i]=q[i]+t;
     }
     t=0;
     for (i=0;i<n;i++)
     {
         if (q[i]>t)
         {
                t=q[i];
         }
     }
printf ("%d",t);
return 0;
}
void main()
{
	int k,a[25],b[25]={0},m,i,j;
	scanf("%d",&k);
	for(i=0;i<=k-1;i++)scanf("%d",&a[i]);
	for(i=k-1;i>=0;i--)
	{
		m=0;
		for(j=i;j<=k-1;j++)if(a[i]>=a[j]&&m<=b[j])m=b[j];
		b[i]=m+1;
	}
	m=b[0];
	for(i=0;i<=k-1;i++)
	{
		if(m<b[i])m=b[i];
	}
	printf("%d",m);
}
int main()
{
    int f[26] , maxnum=1 , i , j , h[26] , n ;
    cin>>n;
    for( i=1 ; i<=n ; i++ ) { cin>>h[i] ; f[i]=1; }
    for( i=2 ; i<=n ; i++ )
    {
       for( j=1 ; j<i ; j++ ) if( h[j]>=h[i] ) f[i]=max( f[i] , f[j]+1 );
       maxnum=max( maxnum , f[i] );
    }
    cout<<maxnum;
}
struct DP
{
	int height;
	int num;
}dp[26];

int main()
{
	int k,i,j;
	int h[26];
	int  Max;
	cin>>k;
	for(i=1;i<=k;i++)
	{
		cin>>h[i];
	}
	dp[0].height=INT_MAX;
	dp[0].num=0;
	for(i=1;i<=k;i++)
	{
		dp[i].height=h[i];
		Max=INT_MIN;
		for(j=0;j<i;j++)
		{
			if(Max<dp[j].num && dp[j].height>=dp[i].height)
				Max=dp[j].num;
		}
		dp[i].num=Max+1;
	}
	Max=INT_MIN;
	for(i=0;i<=k;i++)
		if(Max<dp[i].num) Max=dp[i].num;
	cout<<Max<<endl;


	return 0;
}
int main()
{
	int k,i,j;
	int a[26],b[26];
	for(i=1;i<26;i++)
		b[i]=0;
	scanf("%d",&k);
	for(i=1;i<=k;i++)
		scanf("%d",&a[i]);

	int num[26];
	int max;
	num[k]=1;
	for(i=k-1;i>0;i--)
	{
		for(j=k;j>i;j--)
			if(a[j]<=a[i])
				b[j]=num[j];
		max=0;
		for(j=k;j>i;j--)
			if(b[j]>=max)
				max=b[j];					
		num[i]=max+1;
		for(j=1;j<26;j++)
			b[j]=0;
	}
		
	int x;
	x=num[1];
	for(i=1;i<=k;i++)
	{
		if(x<=num[i])			
			x=num[i];
	}
	printf("%d\n",x);
	return 0;
}
int cal(int *p,int N,int M){//N&#206;a&#191;aê&#188;±è&#189;&#207;?&#196;êy?&#196;&#206;&#187;&#214;&#195;?&#172;M&#206;aê?&#207;&#194;?&#196;êy?&#196;&#184;&#246;êy?&#172;N+M=×ü?&#196;êy&#184;&#246;êy 
	int i,max,sub;
	max=0;
	if(M==0){
		return 1;
	}
	for(i=N+1;i<=N+M;i++){
		if(*(p+N)>=*(p+i)){
			sub=cal(p,i,N+M-i);
			if(sub>=max){
				max=sub;
			}
		}
	} 
	return max+1;
}

int main()
{
	int k,i;
	scanf("%d\n",&k);
	int height[26];
	height[0]=10000000; 
	scanf("%d",&height[1]);
	for(i=1;i<=k-1;i++){
		scanf(" %d",&height[i+1]);
	}
	
	printf("%d",cal(height,0,k+1)-2);
	
	return 0;
 }
void main()
{
	int a[25],A[25]={0},n,i,j,max;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	A[n-1]=1;
	for(i=n-2;i>=0;i--)
	{
		for(j=i;j<n;j++)
			if(a[i]>=a[j])
			{
				if(A[i]<=A[j])
					A[i]=A[j]+1;
			}
			if (A[i]==0)
				A[i]=1;
	}
	max=A[0];
	for(i=0;i<n;i++)
	{
		if(A[i]>max)
			max=A[i];
	}
	printf("%d",max);
}
int Max(int n,int a[])
{
   int x=0;
   for(int i=0;i<n;i++)
   {
       if(x<a[i])
       x=a[i];
   }
   return x;
}
main()
{
   int x,n,i,j,b=1;
   int *p;
   int *q;
   scanf("%d",&n);
   p=(int *)malloc(n*sizeof(int));
   q=(int *)malloc(n*sizeof(int));
   for(i=0;i<n;i++)
       scanf("%d",p+i);
   for(i=n-1;i>=0;i--)
   {
      
      {   x=0;
          for(j=i+1;j<n;j++)
          {
             if((p[i]>=p[j])&&(x<q[j]))
                 x=q[j];
          }
          q[i]=x+1;      
      }
   }
   printf("%d",Max(n,q));       
}
int main()
{
	int a[30],k=0,i=0,j=0,b[30]={0};
	cin>>k;
	for(i=0;i<k;i++)
		cin>>a[i];
	b[0]=1;
	for(i=1;i<k;i++)
	{
		int temp=1;
		for(j=i-1;j>=0;j--)
		{
			if(a[j]>=a[i])
			{
				if((b[j]+1)>temp)
					temp=b[j]+1;
			}
		}
		b[i]=temp;
	}
	int max=0;
	for(i=0;i<k;i++)
		if(b[i]>max)
			max=b[i];
	cout<<max<<endl;
	return 0;
}
int sort(int a[],int k);
int main()
{
int n;
scanf("%d",&n);
int i,j;
int a[25];
for(i=0;i<n;i++)
{
  scanf("%d",&a[i]);
}
int d[25];
for(i=n-1;i>=0;i--)
{
	d[i]=1;
  for(j=i+1;j<n;j++)
  {
    if(a[i]>=a[j]&&d[i]<d[j]+1)
		d[i]=d[j]+1;
  }
}
int max=0;
for(i=0;i<n;i++)
if(d[i]>max)
max=d[i];
printf("%d",max);
  
}
int main()
{
	int k, h[25];
	int len[25];
	int i, j;
	cin >> k;
	for(i = 0; i < k; i ++)
		cin >> h[i];
	len[0] = 1;
	int ans = 1;
	for(i = 1; i < k; i ++)
	{
		/*if(h[i] <= h[i - 1])
			len[i] = len[i - 1] + 1;
		else
			len[i] = 1;
		if(len[i] > ans)
			ans = len[i];*/
		int temp = -1, tIndex = -1;
		for(j = 0; j < i; j ++)
		{
			if(h[j] >= h[i])
			{
				if(len[j] > temp)
				{
					temp = len[j];
					tIndex = j;
				}
			}
		}
		if(temp == -1)
			len[i] = 1;
		else
			len[i] = len[tIndex] + 1;
		if(len[i] > ans)
			ans = len[i];
	}
	cout << ans << endl;
	return 0;
}
int main()
{
    int n,j,m;
    scanf("%d",&n);
    int i,h[26];
    for(i=1;i<=n;i++){scanf("%d",&h[i]);};
    int q[26];
    for(i=1;i<=n;i++){q[i]=1;};
    for(i=n-1;i>=1;i--)
    {m=0;
    for(j=i+1;j<=n;j++){
    if(h[j]<=h[i]){
    if(m<q[j]){m=q[j];};};};
    q[i]=q[i]+m;
}
m=0;
for(i=1;i<=n;i++){if(m<q[i]){m=q[i];};};
printf("%d",m);

}
main()
{
  int k,i,j,a[25]={0},h,b[25]={0},max=0;
  scanf("%d",&k);
  for(i=0;i<k;i++) {scanf("%d",&a[i]);}
  b[k-1]=1;
  for(i=k-2;i>=0;i--)
  {
    for(j=i+1;j<=k-1;j++)
    {
       if(a[j]<=a[i]){if(b[j]+1>max) max=b[j]+1;}
    }
    if(max==0) max=1;
    b[i]=max;
    max=0;
  }
  for(i=0;i<=k-1;i++)
  {
     if(b[i]>max) max=b[i];
  }
  printf("%d",max);
  getchar();
  getchar();
}
int n,a[99];
void main()
{
	int f(int,int,int);
	int i,max;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	max=f(99999,0,0);
	printf("%d\n",max);
}
int f(int hi,int num,int i)
{
	int t1,t2;
	while(a[i]>hi)
		i++;
	if(i>=n)
		return num;
	t1=f(hi,num,i+1);
	t2=f(a[i],num+1,i+1);
	return t1>t2?t1:t2;
}
void main()
{
	int i,j,n,a[25],b[25],max;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=1;
	}
	for(i=n-2;i>=0;i--)
	{
		for(j=i+1;j<n;j++)
		{
			if(a[i]>=a[j]&&b[i]<b[j]+1)
				b[i]=b[j]+1;
		}
	}
	max=0;
	for(i=0;i<n;i++)
		max=(max>b[i])?max:b[i];
	printf("%d\n",max);
}
char max(char a[],char i)
{
	char j,m=a[0];
	for(j=1;j<i;j++)
		if(m<a[j])
			m=a[j];
	return(m);
}

void main()
{
	int h[N]={0};
	char n,i,j;
	scanf("%d",&n);
	for(i=n;i>=1;i--)//nixu!!
		scanf("%d",&h[i]);//h[0]=0
	char mis[N]={0},temp[N]={0};
	mis[0]=0;
	for(i=1;i<=n;i++)
	{
		for(j=0;j<=i-1;j++)//the most that is below h[i]
		{
			if(h[i]>=h[j])
				temp[j]=mis[j]+1;
			else
				temp[j]=0;//
		}
		mis[i]=max(temp,i);
	}
	for(i=0;i<=n;i++)
		printf("%d ",mis[i]);
	printf("%d",max(mis,n+1));


}
int main()
{
    int max=0,i,j,n,maxb,num=0,s,a[30],b[30];
    scanf("%d",&n);
    for(i=0; i<n; i++)
    {
        scanf("%d",&a[i]);
    }
    b[0]=1;
    for(i=1; i<n; i++)
    {
        max=0;
        s=0;
        for(j=0; j<i; j++)
        {
            if((a[j]>=a[i])&&(b[j]>=max))
            {
                b[i]=b[j]+1;
                max=b[j];
                s=1;
            }
        if(s==0)
            {
                b[i]=1;
            }
        }
    }
    maxb=0;
    for(i=0; i<n; i++)
    {
        //printf("%d ",b[i]);
        if(b[i]>maxb)
        {
            maxb=b[i];
        }
    }
    printf("%d\n",maxb);
    return 0;
}
int main()
{
	int h[26],f[26];
	int i=0,j=0,n;
	cin>>n;
	f[0]=0;
	h[0]=0;
	int max=0;
	for(i=1;i<=n;i++)
	{
		cin>>h[i];
		max=0;
		for(j=i-1;j>0;j--)
		{
			if(h[i]<=h[j]&&max<f[j]+1)
			{
				max=f[j];
			}
		}
		f[i]=max+1;
	}
	max=0;
	for (i=1;i<=n;i++)    //?????????????????????
	{                           //????? ????????
		if (max<f[i])
			max=f[i];
	}
	cout<<max<<endl;
	return 0;
}
void main()
{
	int n,i,j,max,a[100],b[100];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++){b[i]=1;}
	for(i=n-2;i>=0;i--)
	{
		max=0;
		for(j=n-1;j>i;j--)
		{
			if(a[i]>=a[j])
			{
				if(b[j]>max){max=b[j];}
			}
		}
		b[i]+=max;
	}
	max=0;
	for(i=0;i<n;i++)
	{
		if(b[i]>max)
		{max=b[i];}
	}
	printf("%d",max);
}
void main(void)
{
	int k, a[25] ,i ,j ,max ,b[25] = {1};
	scanf("%d",&k);
	for(i = 0;i < k;i ++)
	{
		scanf("%d",&a[i]);
	}
	for(i = 1;i < k;i ++)
	{
		max = 1;
		for(j = 0;j < i;j ++)
		{
			if(a[j] >= a[i] && b[j] + 1 >= max)
				max = b[j] + 1;
		}
		b[i] = max;
	}
	max = 0;
	for(i = 0;i < k;i ++)
	{
		if(b[i] > max)
			max = b[i];
	}
	printf("%d",max);
}
int sta[20002];
int mycmp(const void *a,const void *b)
{
	return *(int*)a-*(int*)b;
}
int main()
{
	int input[30]={0};
	int cnt[30]={0};
	int n;
	cin>>n;
	int i;
	for(i=0;i<n;i++)
		cin>>input[i];
	cnt[0]=1;
	for(i=1;i<n;i++)
	{
		int max=0;
		for(int k=i-1;k>=0;k--)
		{
			if(cnt[k]>max&&input[k]>=input[i])
				max=cnt[k];
		}
		cnt[i]=max+1;
	}
	int m=0;
	for(i=0;i<n;i++)
		if(m<cnt[i])
			m=cnt[i];
	cout<<m<<endl;
	return 0;
}