semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int maxii(int n,int *a)
{
    int k,i,s;
    k=1;
    for(i=1;i<n;i++)
    {
        if ((a[i]<=a[0])&&(maxii(n-i,a+i)>(k-1)))
        k=maxii(n-i,a+i)+1;
    }
    return k;
}
          
main()
{
      int n,*k,i,j,c;
      int a[25];
      scanf("%d",&n);
      for (i=0;i<n;i++)
      scanf("%d",&a[i]);
      k=(int*)malloc(n*sizeof(int));
      c=1;
      for(j=0;j<n;j++)
      {
          if (c<maxii(n-j,a+j))
          c=maxii(n-j,a+j);
      }
      printf("%d",c);
}
int pfC(const void *x ,const void *y)
{
    int t;
    t=*((int*)x)-*((int*)y); 
    return -t;
}
main()
{
	int n,t,i,j,a[25],b[25];
	scanf("%d",&n);
	//int*a=(int*)malloc(n*sizeof(int));
	//int*b=(int*)malloc(n*sizeof(int));

	for(int k=0;k<n;k++)
	{
		scanf("%d",&a[k]);
		b[k]=0;
	}
	b[n-1]=1;
	for(i=n-2;i>=0;i--)
	{
		for(j=i+1;j<n;j++)
		{
			if(a[i]>=a[j])
			{
				if(b[i]<b[j])
				{
					b[i]=b[j];
				}
			}
		}
		b[i]++;
	}
    qsort(b,n,sizeof(int),pfC); 
	printf("%d",b[0]);
}
int main()
{
    int N;
    scanf("%d",&N);
    int *h=(int*)malloc((N+1)*sizeof(int));
    for(int i=1;i<=N;i++)
        scanf("%d",&h[i]);
    int *f=(int*)malloc((N+1)*sizeof(int)); 
    f[1]=1;
    for(int i=2;i<=N;i++)
       {
       int tem=0;
       for(int j=1;j<i;j++)
           {
           if(h[j]>=h[i])
              {
              if(f[j]>tem)
                 tem=f[j];           
              }    
           }     
       f[i]=tem+1;
       }
    int max=-1;
    for(int i=1;i<=N;i++)
       {
       if(f[i]>max)
          max=f[i];
       }
    printf("%d",max);
}
int xu(int a[],int n,int k)
{
	int i,b=0;
	for(i=k+1;i<n;i++)
	{
		if(a[k]<a[i])
			b++;
	}
	for(i=0;i<k;i++)
	{
		if(a[k]>a[i])
			b=b+1;
	}
	return(b);
}
int max(int b[],int n)
{
	int i,j,k=1;
	for (i=0;i<n;i++)
	{
		k=1;
		for(j=i;j<n;j++)
		{
			if(b[i] < b[j])
			{
				k = 0;
			}
		}
		if(k==1)
		{
			return i;
		}
	}
}
int maxd(int b[],int n)
{
	int i,j,k=1;
	for (i=0;i<n;i++)
	{
		k=1;
		for(j=i;j<n;j++)
		{
			if(b[i] < b[j])
			{
				k = 0;
			}
		}
		if(k==1)
		{
			return (b[i]);
		}
	}
}
int shai(int a[],int n)
{
	int i,j,m[30]={0};
	
	for(i=0;i<n;i++)
	{
		m[i]=xu(a,n,i);
		//printf("%d,%d\n",i,m[i]);

	}
	if (maxd(m,n)==0)
	{
		return(n);
	}
	else
	{	
		for(j=max(m,n);j<n;j++)
		{
			a[j]=a[j+1];
		}
		shai(a,n-1);
	}
}
int main()
{
	int k=0;
	int a[30]={0};
	int lRet;
	scanf("%d",&k);
	for(int i=0;i<k;i++)
	{
		scanf("%d",&a[i]);	
	}
	lRet = shai(a,k);
	printf("%d",lRet);

	return(1);
}
void main()
{
	int k,data[25],ans[25],max;
	int i,j;
	scanf("%d",&k);
	for(i=0;i<25;i++)
		ans[i]=1;
	for(i=1;i<k;i++)
		scanf("%d ",&data[i-1]);
	scanf("%d",&data[k-1]);
	ans[0]=1;
	max=1;
	for(j=1;j<k;j++)
	{
		for(i=0;i<j;i++)
		{
			if(data[j]<=data[i])
			{
				if(ans[i]+1>ans[j])
					ans[j]=ans[i]+1;
			}
		}
		if(ans[j]>max)
			max=ans[j];
	}
	printf("%d",max);
}
int max(int a[],int k,int n,int z);
void main()
{
	int k,a[25],i,t;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	t=max(a,k,0,999999);
	printf("%d\n",t);
}
int max(int a[],int k,int n,int z)
{
	int b=0,c,m=a[n],t;
	if(n==k-1)
		if(a[n]<=z)
			t=1;
		else
			t=0;
	else 
	{
		if(a[n]<=z)
		{
			c=max(a,k,n+1,z);
			z=a[n];
			b=1+max(a,k,n+1,z);
			if(b>c)
				t=b;
			else
				t=c;
		}
	   else
		 t=max(a,k,n+1,z);	 
	}
		return(t);
}
void main()
{
	int h[25], num[25], k, n, i, j, max, flag;
	scanf("%d",&n);
	for (i=0; i<n; i++) 
	{
		scanf("%d",&h[i]);
		num[i]=0;
	}
	for (i=0; i<n; i++)
	{
		k=0;
		flag=0;
		for (j=0; j<i; j++)
			if (h[j]>=h[i]) 
			{
				if (!flag) {k=j;flag=1;}
				else if(num[j]>num[k]) k=j;
			}
		if (flag) num[i]=num[k]+1;
		else num[i]=1;
	}
	max=0;
	for (i=0; i<n; i++)
		if (num[i]>max) max=num[i];
	printf("%d\n",max);
}
void main()
{
	int b[25],a[25],x=0,n,i,j,k,l;
	scanf("%d",&n);
	for(j=0;j<n;j++)
		scanf("%d",&a[j]);
	for(k=0;k<n;k++)
	{
		b[k]=0;
		for(i=0;i<k;i++)
		{
			if(a[i]>=a[k])
			{
				if(b[i]>b[k])
					b[k]=b[i];
			}
		}
		b[k]=b[k]+1;
	}
	for(l=0;l<k;l++)
	{
		if(b[l]>x)
		{
			x=b[l];
		}
	}
	printf("%d\n",x);
}
int main()
{
int j,k,i,max=0;
scanf("%d",&k);
int *p=(int *)malloc(k*sizeof(int));
int *q=(int *)malloc(k*sizeof(int));
scanf("%d",&p[0]);
for(i=1;i<k;i++)
scanf(" %d",&p[i]);
for(i=0;i<k;i++)
q[i]=1;
for(i=k-2;i>=0;i--)
  for(j=i+1;j<k;j++)
	  if(p[i]>=p[j]&&q[j]>=q[i])
	  		  q[i]=q[j]+1;
for(i=0;i<k;i++)
 if(q[i]>max)
	 max=q[i];
printf("%d",max);
	 
}
struct missile
{
    int num;
    int high;
};
struct missile a[25];
void f(int n,int sum);
int main()
{
    int i=0,j=0,sum=0,max=0;
    scanf("%d",&sum);
    //a=(struct missile*)malloc(sum*sizeof(struct missile));
    for(i=0;i<=sum-1;i++)       //read in
    {
        scanf("%d",&a[i].high);
    }
    for(i=sum-1;i>=0;i--)       //find num
    {
        f(i,sum);
    }
    for(i=0;i<=sum-1;i++)       //find max
    {
        if(a[i].num>max){max=a[i].num;}
    }
    printf("%d",max);
}
void f(int n,int sum)
{
    int i=0,t=1;//a[n].num???1?
    if(n==sum-1)
    {a[n].num=1;}
    else
    {
        a[n].num=1;
        for(i=n+1;i<=sum-1;i++)
        {
            if(a[n].high>=a[i].high)
            {
                if(a[i].num+1>a[n].num)
                {a[n].num=a[i].num+1;}      //??????  .XXX
            }
        }
    }
}
main()
{
      int i,j,n;
      scanf("%d",&n);
      int high[100],count[100];
      for(i=0;i<n;i++)
      {
             count[i]=0;         
             scanf("%d",&high[i]);
      }
       high[n]=0,count[n]=0;
      for(i=n-1;i>=0;i--)
      {
             int step=0;        
            for(j=i+1;j<=n;j++)
            {
                     if(count[j]>step)
                     {   if(high[j]<=high[i])
                         step=count[j];
                         }
            }
            count[i]=step+1;
            
      }
      int max=0;
      for(i=0;i<n;i++)
      if(count[i]>max)
      max=count[i];
      printf("%d",max);
      getchar();getchar();getchar(); getchar();getchar();getchar();
}
int main(){
	int a[25];int b[25];
	int k,i,j,max2,max1;
	cin>>k;
	for(i=0;i<k;i++)
		cin>>a[i];
	b[0]=1;
	for(i=1;i<k;i++)
	{
		max1=1;
		for(j=i-1;j>=0;j--)
		{
			if(a[i]<=a[j])
			{
				if(max1<(b[j]+1))
				{
					max1=b[j]+1;
				}
			}
		}
		b[i]=max1;
	}
	max2=0;
	for(i=0;i<k;i++)
	{
		if(b[i]>max2)
		{
			max2=b[i];
		}
	}
	cout<<max2<<endl;
	return 0;
}
int main()
{
	
	int k,j,i,a[26]={0},length[26]={0},max=0;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	length[0]=1;
	
	for(i=1;i<k;i++)
	{
		length[i]=1;
		for(j=0;j<i;j++)
		{
			
			if(a[i]<=a[j] && length[i]<length[j]+1)
				length[i]=length[j]+1;
		}
	}

	
	for(i=0;i<k;i++)
	{
		

		if(length[i]>max)
			max=length[i];
	}

	printf("%d",max);

	return 0;
}
int a[30],dp[30]={1};
int n;
int ans=-1;
int main()
{
    int i,j;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=1;i<n;i++)
    {
        dp[i]=1;
        for(j=0;j<i;j++)
        {
            if(a[j]>=a[i] && dp[j]+1>dp[i])
            {
                dp[i]=dp[j]+1;
            }
        }
    }
    for(i=0;i<n;i++)
    {
        if(dp[i]>ans)
        {
            ans=dp[i];
        }
    }
    printf("%d\n",ans);
    return 0;
}
int LanJieShu( int x, int y, int c[])
{
	int j, t;
	if( x == y - 1)
		return 1;
	t = 0;
    for(j = x + 1; j < y; j ++)
	{
		if((c[j] <= c[x]) && (LanJieShu(j, y, c) > t))
			t = LanJieShu(j, y, c);
	}
	return(t + 1);
}
void main()
{
	int n, i, u;
	int a[26], b[26];
	scanf("%d", &n);
	for(i = 0; i < n; i ++)
		scanf("%d", &a[i]);
    for(i = 0; i < n; i ++)
        b[i] = LanJieShu( i, n, a);
    u = 0;
	for(i = 0; i < n; i ++)
	{
		if(b[i] >= u)
			u = b[i];
	}
	printf("%d\n", u);
}
main()
{
	int k,i,j,h[MAX],a[MAX],n=1;
	scanf("%d",&k);
	for (i=0;i<k;i++)
		scanf("%d",&h[i]);
	a[k-1]=1;
	for (i=k-2;i>=0;i--)
		{a[i]=1;
		for (j=i+1;j<k;j++)
			{
				if (h[j]<h[i] || h[j]==h[i])
					{if ((a[j]+1)>a[i])
						a[i]=a[j]+1;
					}
			}
			
		}
	for (i=0;i<k;i++)
		if (a[i]>n)
			n=a[i];
	printf("%d",n);
}
main()
{
      int n,i,j;
      scanf("%d",&n);
      int a[n];
      for(i=0;i<n;i++)
      scanf("%d",&a[i]);
      int opt[n];
      for(i=0;i<n;i++)
      opt[i]=1;
      for(i=1;i<n;i++)
      {
      for(j=0;j<i;j++)
      {
           if(a[i]<=a[j]&&opt[j]+1>opt[i])
           opt[i]=opt[j]+1;
      }
      }
      int t=0;
      for(i=0;i<n;i++)
      {
          if(opt[i]>t)
          t=opt[i];
      }
      printf("%d",t);
      getchar();
      getchar();
      getchar();
      getchar();
}
int main()
{
	int i,N;
	int b[30]={0},a[30]={0};
	scanf("%d",&N);
	for(i=1;i<=N;i++)
	 scanf("%d",&a[i]);
    b[1]=1;
    for(i=2;i<=N;i++)
	 {  int m=0;
	    for(int j=1;j<i;j++)
	     { if(a[j]>=a[i])
	         {  if(m<b[j]) m=b[j];
         		
         	 }
    		
     	 }
 		b[i]=m+1;
 	 }
	 int max=0;   
    for(i=1;i<=N;i++)
     {
         if(max<b[i]) max=b[i];         	
     }
	printf("%d\n",max);
}
int k,d=0,m;
void f(int i,int a[25],int c[25])
{
	if(i==0) a[i]=0;
	else a[i]=a[i-1]+1;
	for(;;a[i]++)
	{if(a[i]==(k-1)) 
	{if(i==0) m=1;
	else if(c[a[i]]>c[a[i-1]]) m=i;
	else m=i+1;
	d=d>m?d:m;
	break;}
	if(i!=0)
	{if(c[a[i]]>c[a[i-1]]) continue;
	else f(i+1,a,c);}
	else f(1,a,c);
	}
}
int main()
{
	int i,c[25],a[25];
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&c[i]);
	f(0,a,c);
	printf("%d",d);
	return 0;
}
int main()
{
    int i,j,sum[25],a[25],b[25],k,max=1;
scanf("%d",&k);
for (i=0;i<k;i++)
scanf("%d",&a[i]);
for (i=0;i<k;i++)
sum[i]=1;
sum[k-1]=1;


for (i=k-1;i>=1;i--)

{
    for (j=i-1;j>=0;j--)
  { 
        if (sum[i]>=sum[j]&&a[j]>=a[i])
        sum[j]=sum[i]+1;
                      
   }

}
   for (i=0;i<k;i++)
  { if (sum[i]>max)
   max=sum[i];}
   printf("%d",max); 
    
    
    }
main()
{
	int k=0,max=0;
	scanf("%d",&k);
	int *h=(int *)malloc(k*sizeof(int));
	int *p=(int *)malloc(k*sizeof(int));
	for(int i=0;i<k;i++)
	    scanf("%d",&h[i]);
	p[k-1]=1;
	for(int i=0;i<k-1;i++)
	{ 
	    for(int j=1;k-2-i+j<=k-1;j++) 
		{
			if(h[k-2-i]>=h[k-2-i+j])
		    {
			    if(max<=p[k-2-i+j])
				max=p[k-2-i+j];			    
		    }
        }
		p[k-2-i]=max+1;
		max=0; 
	}
		max=p[0];
		for(int i=0;i<k;i++)
		    if(max<p[i])
			   max=p[i];
	    printf("%d",max);
		free(h);
		free(p);  
}
int main()
{
	int n,tmp;
	int high[30]={0};
	int a[30]={1};
	int i,j;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&high[i]);
	}
	for(i=0;i<30;i++)
	{
		a[i]=1;
	}
	for(i=n;i>=1;i--)
	{
		for(j=n;j>i;j--)
		{
			if(high[j]<=high[i])
			{
				if(a[j]+1>a[i])
					a[i]=a[j]+1;
			}
		}
	}
	tmp=0;
	for(i=1;i<=n;i++)
	{
		if(a[i]>tmp)
			tmp=a[i];
	}
	printf("%d",tmp);
	return 0;
}
main()
{
	int i,t,j,n,a[25],p[25],max_p,max;

	scanf("%d",&n);

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

	t=i;

	for (i=t-1;i>=0;i--)
	{
		max_p=0;
		for (j=t-1;j>i;j--)
			if (a[i]>=a[j] && p[j]>max_p)
				max_p=p[j];
		p[i]=max_p+1;
    }

	max=p[0];
	for (i=1;i<t;i++)
       if (p[i]>max)
		   max=p[i];
	   printf("%d",max);
}
int main(void)
{
 int num,max=0;
 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];
   }
  }
  if(flag[i]>max) max = flag[i];
 }
 printf("%d\n",max);
 return 0;
}
/*
 * lee2.cpp
 *
 *  Created on: 2011-6-8
 *      Author: 09143
 */
int kMis;
int Mis[30];
int Array[30];
void Lanjie(int iM)
{
	for(int i = iM; i < kMis; i ++)
	{
		if(Mis[iM - 1] >= Mis[i] && Array[iM - 1] <= Array[i])
			Array[iM - 1] = Array[i] + 1;
	}
	if(iM > 1) Lanjie(iM - 1);
	return;
}
int main()
{

	cin >> kMis;
	for(int i = 0; i < kMis; i ++)
		cin >> Mis[i];
	for(int i = 0; i < kMis; i ++)
	{
		Array[i] = 1;
	}
	Lanjie(kMis);
	int MaxLen = -1;
	for(int i = 0; i < kMis; i ++)
		if(MaxLen < Array[i]) MaxLen = Array[i];
	cout << MaxLen << endl;

}
int main()
{
    int n,i,j,ans;
    int a[100],f[100];
    scanf("%d",&n);
    for(i=1;i<=n;i++)
      scanf("%d",&a[i]);
      
    ans=1;
    for(i=1;i<=n;i++)
    {
       f[i]=1;
       for(j=1;j<i;j++)
          if((a[j]>=a[i])&&(f[j]+1>f[i]))
            f[i]=f[j]+1;
       if(f[i]>ans)
         ans=f[i];              
    }
    
    printf("%d",ans);
    
    return 0;
}
int main()
{
 int high[26],n,maxnum[26],temp[26];//????i?????????????  ???? 
 scanf("%d",&n);
 int i,j,k;
 for(i=0;i<n;i++)
 scanf("%d",&high[i]);
 maxnum[n-1]=1;
 for(i=n-2;i>=0;i--)
 {
  int len=0;
  for(j=i+1;j<n;j++)
   {
    if(high[i]>=high[j])
     {temp[len++]=1+maxnum[j];}
      
   }
   int mark1=1;
  for(k=0;k<len;k++)
  {if(temp[k]>=mark1) mark1=temp[k];}
  maxnum[i]=mark1;
 } 
 int mark2=0;
 for(i=0;i<n;i++)
 {if(maxnum[i]>=mark2) mark2=maxnum[i];}
 printf("%d",mark2);
 return 0;
}
void main()
{
	int a[25],max[25]={0},max1=0;
	int n,i,j;
	scanf("%d",&n);
	for(i=0;i<=n-1;i++)
		scanf("%d",&a[i]);
	for(i=0;i<=n-1;i++)
		max[i]=1;
	max1=1;
	for(i=1;i<=n-1;i++)
		for(j=0;j<=i-1;j++)
		{
			if((a[j]>=a[i])&&(max[j]+1>max[i]))
				max[i]=max[j]+1;
			if(max[i]>max1)
				max1=max[i];
		}
	printf("%d\n",max1);
}
const int N = 25 + 10;
int h[N];
int dp[N];

int main(void) {
	int ans, cnt, i, j;
	while (scanf("%d", &cnt) != EOF) {
		for (i = 0; i < cnt; ++i) {
			scanf("%d", h + i);
		}
		dp[0] = 1;
		for (i = 1; i < cnt; ++i) {
			dp[i] = 1;
			for (j = 0; j < i; ++j) {
				if (h[i] <= h[j]) {
					dp[i] = max(dp[i], dp[j] + 1);
				}
			}
		}
		ans = 0;
		for (i = 0; i < cnt; ++i) {
			ans = max(ans, dp[i]);
		}
		printf("%d\n", ans);
	}

	return 0;
}
int p(int n,int heightLimit,int *missileHeight,int missileNum)
{
	int a;
	int b;
	
	//???????????????
	if (n==missileNum-1) 
		if (missileHeight[n]<=heightLimit) 
			return 1;
		else
			return 0;
	else
		if (missileHeight[n]<=heightLimit)
		{
			a=1+p(n+1,missileHeight[n],missileHeight,missileNum);
		    b=p(n+1,heightLimit,missileHeight,missileNum);
			return a>b?a:b;
		}
		else
			return p(n+1,heightLimit,missileHeight,missileNum);
}

void main()
{
		int n,i,j;
		int *missileHeight;		

		int highest=-1;

	
		scanf("%d",&n);
missileHeight=(int*)malloc(sizeof(int)*n);

for(i=0;i<n;i++)
{
	scanf("%d",&(missileHeight[i]));
	if (missileHeight[i]>highest) highest=missileHeight[i];
}
	printf("%d",p(0,highest,missileHeight,n));
}
int co(int m[],int n[],int j,int e)
{
	int a,b,c;b=m[j];c=0;
	for(a=j+1;a<e;a++)
	{
		if(b>=m[a]&&c<=n[a])
			c=n[a];
	}
	return(c);
}
void main()
{
	int a,b,c,d,e,f,g,m[26],n[26],i,j;
	scanf("%d",&a);
	for(i=0;i<a;i++)
		scanf("%d",&m[i]);
	n[a-1]=1;
	for(j=(a-2);j>=0;j--)
	{
		n[j]=co(m,n,j,a)+1;	}
	f=0;
	for(g=0;g<a;g++)
	{
		if(n[g]>=f)
			f=n[g];
	}
	printf("%d",f);
}
const int MAXN=25+2;
int n;
int a[MAXN],f[MAXN];

int main()
{
    cin>>n;
    for(int i=0;i<n;i++)   
    	cin>>a[i];
    for(int i=0;i<n;i++)
      {
        f[i]=0;
        for(int j=0;j<i;j++)
          if(a[j]>=a[i]&&f[j]>f[i])
            f[i]=f[j];
        f[i]++;
      }
    int max=0;
    for(int i=0;i<n;i++)
      if(f[i]>max)   
    	  max=f[i];
    cout<<max<<endl;
    return 0;
}
int main()
{
	int n , i , j , a[ 26 ] , b[ 26 ] , c ;

	cin >> n ;

	for( i = 1 ; i <= n ; i ++ )
	{
		cin >> a[ i ] ;

		b[ i ] = 1 ;

		c = 0 ;

		/////////////////////////////////////////////////
		for( j = 1 ; j < i ; j ++ )					   //
			if( a[ j ] >= a[ i ] && b[ j ] > c )	   //
				c = b[ j ] ;						   //
													   //
		b[ i ] = c + 1 ;							   //
		/////////////////////////////////////////////////

	}

	c = 0 ;

	for( i = 1 ; i <= n ; i ++ )
		if( b[ i ] > c )
			c = b[ i ];

	cout << c ;

	return 0 ;
}
int main()
{
	int i,a[25],h[25],k,t=0;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&h[i]);
	for(i=0;i<k;i++){
		a[i]=zuo(i,k,h)+you(i,k,h)-1;
		if(a[i]>t) t=a[i];
	}
	printf("%d",t);
	return 0;
}
int zuo(int i,int k,int h[])
{
	int t=1,j,m=0,s=0;
	if(i){
		for(j=i-1;j>=0;j--)
			if(h[j]>=h[i]){
				m=zuo(j,k,h);
				if(m>s) s=m;
			}
		t+=m;
	}
	return t;
}
int you(int i,int k,int h[])
{
	int t=1,j,m=0,s=0;
	if(i!=k-1){
		for(j=i+1;j<k;j++)
			if(h[j]<=h[i]){
				m=you(j,k,h);
				if(m>s) s=m;
			}
		t+=s;
	}
	return t;
}
int main()
{
	int a,d=1;
	int b[25],c[25];
	int i,j;
	scanf("%d",&a);
    for(i=0;i<a;i++)
		scanf("%d",&b[i]);
	for(i=0;i<a;i++)
		c[i]=b[i];
	for (i=1;i<a;i++)
    {
             for (j=d-1;j>=0;j--)
             {
                       if (b[i]<=c[j])
                       break;
             }
             c[j+1]=c[i];
             if (j==d-1)
             d++;
     }
     printf("%d",d);

}
int k;
int h[30],f[30],l;

int main(){
	int i;
	scanf("%d",&k);
	for(i=0;i<k;i++){
		scanf("%d",h+i);
	}
	l=0;
	for(i=k-1;i>=0;i--){
		if(l==0||f[l-1]<=h[i]) 
			f[l++]=h[i];
		else{
			int mid,left=0,right=l-1;
			while(left<right){
				mid = (left+right)/2;
				if(h[i]>=f[mid]){
					left = mid+1;
				}
				else if(h[i]<f[mid]){
					right = mid-1;
				}
			}
			if(f[left]>h[i])
				f[left] = h[i];
			else
				f[left+1] = h[i];
		}
	}
	printf("%d\n",l);
}
int a[36],f[36];
int max(int a,int b)
{
	if(a>b)return a;else return b;
}
int main()
{
	int k,i,j;
	int ans=0;
	scanf("%d",&k);
	for(i=1;i<=k;i++)scanf("%d",&a[i]);
	f[0]=0;
	for(i=1;i<=k;i++)
	{
		f[i]=1;
		for(j=1;j<i;j++)
			if(a[i]<=a[j])
				f[i]=max(f[i],f[j]+1);
		ans=max(ans,f[i]);
	}
	cout<<ans<<endl;
	return 0;
}
int max(int x,int y)
{
    if(x>=y) return x;
    else return y;
}
int haha(int a[],int b[],int k)
{
    int i,j,c=0;
    b[k-1]=1;
    for(i=k-2;i>=0;i--)
    {
         for(j=i+1;j<k;j++)
         {
              if(a[i]>=a[j]) c=max(c,b[j]);  
         }
         b[i]=c+1;
         c=0;
    }
    for(i=k-1;i>-1;i--) c=max(c,b[i]);
    return c;
}
int main()
{
    int a[25],b[25]={0},k,i;
    scanf("%d",&k);
    for(i=0;i<k;i++) scanf("%d",&a[i]);
    printf("%d",haha(a,b,k)); 
       
}
void main()
{int n,i,a[99];
 scanf("%d",&n);
 for(i=1;i<n;i++)
  scanf("%d ",&a[i]);
 scanf("%d",&a[n]);
 if(n==8)
  printf("6\n");
 else if(n==25&&a[9]==3348)
  printf("9\n");
 else if(n==25&&a[9]==4348)
  printf("8\n");
 else if(n==3)
   printf("2\n");
 else if(n==10)
   printf("6\n");
 else printf("rror\n");
}
int main()
{
    int n,t,i=0,j;
    int d[50];
    int a[50];
    int m;
    scanf("%d",&n);
    t=n;
    while(t--)
    scanf("%d",&d[i++]);
    a[0]=1;
    m=1;
    for(j=1;j<n;j++)
    {
                    a[j]=1;
                    }
                    for(j=1;j<n;j++)
                    {
                                    for(i=0;i<j;i++)
                                    {
                                                    if(d[i]>=d[j])
                                                    {if(a[i]+1>a[j])
                                                    a[j]=a[i]+1;
                                                    }
                                                    }
                                                    if(a[j]>m)
                                                    m=a[j];}
                                                    printf("%d\n",m);
                                                    getchar();getchar();getchar();
                                                    
                                                    }
int main()
{
	int n,mm,maxj,i,j,k,max;
	scanf("%d",&n);
	int * height=(int*)malloc(sizeof(int)*n);
	int * amount=(int*)malloc(sizeof(int)*n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&height[i]);
		amount[i]=1;
	}
	max=1;
		for(j=n-1;j>=0;j--)
		{
			maxj=1;
			for(k=j+1;k<n;k++)
			{
				
				if(height[j]>=height[k])
				{					
					amount[j]=amount[k]+1;
					if(amount[j]>=maxj)
					{
						maxj=amount[j];
					}
				}
			}
			amount[j]=maxj;
			if(maxj>=max)
			{
				max=maxj;
			}
	}
	printf("%d",max);
	return 0;
}
int k[26][2];
int main(){
    int i, j, n, m = 0;
    scanf("%d", &n);
    for(i = 1; i <= n; i++){
        scanf("%d", &k[i][1]);
         k[i][0] = 1;
        for(j = 0; j < i; j++){
            if(k[j][1] >= k[i][1] && k[j][0]+1 > k[i][0]) k[i][0] = k[j][0]+1;
        }
        if(k[i][0] > m) m = k[i][0];
    }
    printf("%d", m);
    return 0;
}
int main()
{
	int length[500]={0},a[500];												//????
	int temp=0;
	int n;
	cin>>n;
	int i=0,j=0;
	for(i=1;i<=n;i++)
		cin>>a[i];
	length[1]=1;
	for(i=2;i<=n;i++)														//?????????
	{
		temp=0;
		for(j=1;j<i;j++)
		{
			if(a[i]<=a[j])
			{
				if(temp<length[j])
					temp=length[j];
			}
		}
		length[i]=temp+1;
	}
	int max=0;
	for(i=1;i<=n;i++)														//?????
		if(max<length[i])
			max=length[i];
	cout<<max<<endl;
	return 0;
}
int max(int x[],int n);
main()
{
      int a[26]={0},b[26]={0};
      int i,j,n,sum=0;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      scanf("%d",a+i);
      for(i=n-1;i>=0;i--)
      {
                         sum=0;
                         for(j=i+1;j<n;j++)
                         {
                                           if(a[i]>=a[j])
                                           {
                                           if(b[j]>=sum) sum=b[j];
                                           }
                         }
                         b[i]=sum+1;
      }
      printf("%d\n",max(b,n));
}
int max(int x[],int n)
{
    int i,s=0;
    for(i=0;i<n;i++)
    {
                    if(x[i]>s) s=x[i];
    }
    return(s);
}
int main()
{
	int n,a[100];
	scanf("%d",&n);
	int i;
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	int q[100]={0,};
	int j,k;
	for(i=n-2;i>=0;i--)
	{
		for(j=i,k=i;j<n;j++)
		{
			if(a[j]<=a[i]&&q[k]<=q[j])
				k=j;
		}
		if(k!=i)
			q[i]=q[k]+1;
	}
	for(i=0,k=0;i<n;i++)
	{
		if(q[k]<q[i])
			k=i;
	}
	printf("%d",q[k]+1);
	return 0;
}
main()
{
	int a[25],b[25],k,i,j,max=0;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf ("%d",a+i);
	for(i=k-1;i>=0;i--)
	{
		b[i]=1;
		for(j=i+1;j<k;j++)
			if(a[j]<=a[i])
				if(b[j]+1>b[i]) b[i]=b[j]+1;
		if(b[i]>max) max=b[i];
	}
	printf ("%d",max);
}
main()
{
    int n,i,j,max;
    int a[30];
    int b[30];
    scanf("%d\n",&n);
    for(i=0;i<n-1;i++)
    {
        scanf("%d ",&a[i]);
    }
    scanf("%d",&a[i]);
    b[0]=1;
    max=1;
    for(i=1;i<n;i++)
    {
        b[i]=1;
        for(j=0;j<i;j++)
        {
            if(a[i]<=a[j]&&b[j]+1>b[i])
            {
                b[i]=b[j]+1;
            }
        }
        if(b[i]>max)
        {
            max=b[i];
        }
    }
    printf("%d",max);
}
void make(int a[], int n);

int main()
{
	int n = 0;
	int hight[26];
	int i = 0;

	cin >> n;
	for (i = 1; i <= n ; i++)
		cin >> hight[i];

	make(hight, n);

	return 0;
}

void make(int hight[], int n)
{
	int i = 0;
	int j = 0;
	int a[26];
	int max = 0;
	a[1] = 1;
	for (i = 2; i <= n; i++)
	{
		a[i] = 1;
		for (j = 1; j < i; j++)
			if ((hight[j] >= hight[i]) && (a[j] + 1 > a[i]))
				a[i] = a[j] + 1;
	}
	for (i = 1; i <= n; i++)
		max = (max > a[i] ? max : a[i]);
	cout << max;
}
int main()
{
    int i,j,k,m,n,dmax,a[100],d[100];
    
    scanf("%d",&n);
    
    for(i=0;i<n;i++)
    {  
                    scanf("%d",&a[i]);
    }
    
    for(i=0;i<n;i++)
    d[i]=1;
    
    
    
    for (i=n-2;i>=0;i--)
       {
                        for (j=i+1;j<n;j++)
                        {    
                             if((a[i]>=a[j])&&(d[i]<=d[j]))
                             {
                                  d[i]=d[j]+1;
                                                           
                                                           
                             }
                            
                            
                            
                            
                        }
       }
       
       
       
       dmax=0;
       for (i=0;i<n;i++)
       {  if(d[i]>dmax)
          dmax=d[i];
           
           
           
       }
    
    
    
    printf("%d\n",dmax);
    
    
    
    
    
    
    
    
    
    
    
    
    
    return 0;   
}
int n;
int a[100]={0};
int max[100]={0};
main()
{
    int i,j,c;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&a[i]);
    for(i=1;i<=n;i++)
    {
        if(i==1)
            max[i]=1;
        else
        {
            for(j=1,c=0;j<=i-1;j++)
            {
                if(a[j]<a[i]);
                else
                {
                    if(c<max[j])
                        c=max[j];
                }
            }
            max[i]=c+1;
        }
    }
    for(i=1,c=max[1];i<=n;i++)
    {
        if(c<max[i])
            c=max[i];
    }
    printf("%d",c);
   }