semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
main()
{
	int i,j,dmax,n,array[32],d[32]={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,1,1,1,1,1,1,1};
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&array[i]);
	}
	d[n-1]=1;
    for(i=n-2;i>=0;i--)
	{
		for(j=i+1;j<n;j++)
		{
			if((array[j]<=array[i])&&(d[i]<d[j]+1))
			{
			   d[i]=d[j]+1;
			}
		}
    }
    dmax = 0;
    for(i=0;i<n;i++)
	{  
		if(d[i]>dmax)
		{
			dmax = d[i];
		}
    }
    printf("%d",dmax);
return 0;
}
int main()
{
    int s[26],d[26];
    int i,j,k;
    int n;
    scanf("%d", &n);
    for (i=0;i<n;i++)
    {
        scanf("%d", s+i);
        d[i]=0;
    }
    for (i=n-1;i>-1;i--)
    {
        k=0;
        for (j=i+1;j<n;j++)
        {
            if ( k<d[j] && s[i]>=s[j]) k=d[j];
        }
        k++;
        d[i]=k;
    }
k=0;
for (i=0;i<n;i++)
{
if ( d[i]>k) k=d[i];}    
printf("%d", k);
    return 0;
}
main()
{
      int k,i,j,temp,max;
      int a[100],ans[100];
      scanf("%d",&k);
      for(i=1;i<=k;i++) scanf("%d",&a[i]);
      for(i=1;i<=k;i++) ans[i]=1;
      for(i=k-1;i>=1;i--)
      {
                         temp=1;
                         for(j=i+1;j<=k;j++)
                         {
                                            if(a[j]<=a[i])
                                            {
                                                          if(ans[j]+1>temp) temp=ans[j]+1;
                                            }
                         }
                         ans[i]=temp;
      }
      max=0;
      for(i=1;i<=k;i++)
      {
                       if(ans[i]>max) max=ans[i];
      }
      printf("%d",max);
      
}
int main()
{
int k,i,j,n,m,temp;
int a[26],g[26];

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

for(m=1;m<=k;m++)
g[m]=1;

for(n=k-1;n>0;n--)
  for(j=n+1;j<=k;j++)
  {
      if(a[n]>=a[j]&&g[n]-1<g[j])
     {
      g[n]=g[j]+1;
     }                   
  }

for(i=1;i<k;i++)
{for(j=i+1;j<=k;j++)
if(g[i]<g[j]){temp=g[i];g[i]=g[j];g[j]=temp;}    
}
printf("%d",g[1]);
}
int f[30];
int a[30];
int k;

int main()
{
	int i,j;
	cin >> k;
	for (i = 0;i < k;i ++)
	{
		cin >> a[i];
		f[i] = 1;
	}
	for (i = 1;i < k;i ++)
	{
		for (j = 0;j < i;j ++)
		{
			if (a[j] >= a[i])
			{
				if (f[j] + 1 > f[i])
				{
					f[i] = f[j] + 1;
				}
			}
		}
	}
	j = f[0];
	for (i = 1;i < k;i ++)
	{
		if (f[i] > j) j = f[i];
	}
	cout << j << endl;
	return 0;
}
int main()
{
	int n,i,j;
	int k[25], a[25];
	int maxk, maxa;
	scanf("%d",&n);
	for(i = 0; i<n;i++)
	{
		scanf("%d",&k[i]);
	}
	a[0] = 1;
	maxk = 1;
	
	for(i =1;i<n;i++)
	{
		maxa = 0;
		
		for(j=0;j<i;j++)
		{
			if(k[j]>=k[i])
			{
				if(a[j]>=maxa)
				{
					maxa = a[j];
				}
				
			}
			
		}
		a[i] = maxa + 1;
		
		
		if(a[i]>= maxk)
		{
			maxk = a[i];
		}
	}
	printf("%d",maxk);

	            
}
int main()
{
    int fff(int a[],int k);
    int i,n,a[25],sum;
    scanf("%d",&n);
    for(i=0;i<n;i++)scanf("%d",&a[i]);
    sum=fff(a,1);
    for(i=2;i<n+1;i++)
                      if(sum<fff(a,i))sum=fff(a,i);
    printf("%d",sum);
}
int fff(int a[],int k)
{
         int t=0,i;
     if(k==0){t=0;}
     if(k==1){t=1;}
     if(k>1)
     {
      t=1;
     for(i=1;i<k;i++)
     {
            if(a[k-1]<=a[i-1])
            {
                                 if((fff(a,i)+1)>t)t=fff(a,i)+1;}
     }
     }
     return t;
}
int i,j;
void main()
{
	int b[26]={0};
	int k;
	int f(int x,int y,int a[26]);
	scanf("%d",&k);
	for(i=0;i<=k-1;i++)
		scanf("%d",&b[i]);
	printf("%d\n",f(k,k,b)-1);
}
int f(int x,int y,int a[26])
{
	if(y==0)
		return(1);
	int s=0;
	if(y>=1)
	{
		for(i=0;i<y;i++)
		{
			if(a[i]>=a[y]&&f(x,i,a)>=s)
				s=f(x,i,a);
		}
	}
	if(i==y)
		return(s+1);
}
int n, a[MAXN + 10], f[MAXN + 10];

int main()
{

	cin >> n;
	for (int i = 0; i < n; ++i)
	{
		cin >> a[i];
	}
	int ans = 0;
	for (int i = 0; i < n; ++i)
	{
		for (int j = 0; j < i; ++j)
		{
			if (a[j] >= a[i]) f[i] = max(f[i], f[j]);
		}
		f[i]++;
		ans = max(ans, f[i]);
	}
	cout << ans << endl;
	return 0;
}
void main()
{
	int i,j,n,t,a[100]={0},f[100]={0};
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	t=0;
	for(i=n;i>=1;i--)
	{
		for(j=n;j>=i;j--)
			if(a[i]>=a[j]) f[i]=(f[i]>f[j])? f[i]:f[j];
	    f[i]++;
		t=(f[i]>t)? f[i]:t;
	}
	printf("%d\n",t);
}
void main()
{
 int i,j,rec[25],n[25],m,k;
 scanf("%d",&k);
 for(i=0;i<=k-1;i++)
 {
  scanf("%d",&rec[i]);
  n[i]=1;
 }
 for(i=1;i<=k-1;i++)
  for(j=0;j<i;j++)
   if(rec[j]>=rec[i])
    n[i]=max(n[i],n[j]+1);
 m=0;
 for(i=0;i<k;i++)
  m=max(m,n[i]);
 printf("%d\n",m);
 }
int max(int a,int b)
{
 int c;
 c=a>b?a:b;
 return(c);
}
int main()
{
	int f(int a[],int n);
	int a[30],n,i,s;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	s=f(a,n);
	printf("%d",s);
}

int f(int a[],int n)
{   int max(int x,int y);
int g(int a[],int n,int b);
	if(n==0)return(0);else
return(max(g(a+1,n-1,a[0])+1,f(a+1,n-1)));}

int g(int a[],int n,int b)
{   int max(int x,int y);
	if(n==0)return(0);else
	if(n==1)
    if(a[0]>b)
	return(0);
	else
	return(1);
	else
	if(a[0]>b)
	return(g(a+1,n-1,b));
	else
		return(max(g(a+1,n-1,b),g(a+1,n-1,a[0])+1));}
int max(int x,int y)
{
	return(x>y?x:y);

}
int n;
int *h;
int *m;
int max=0;

void calc(int num)
{
int i;
*(m+num)=1;
for(i=num+1;i<=n-1;i++)
if(*(h+i)<=*(h+num))
if(*(m+i)+1>*(m+num))
*(m+num)=*(m+i)+1;
if(*(m+num)>max)
max=*(m+num);
}

main()
{
int i;
scanf("%d",&n);
h=(int *)malloc(sizeof(int)*n);
m=(int *)malloc(sizeof(int)*n);
for(i=0;i<=n-1;i++)
scanf("%d",h+i);
*(m+n-1)=1;
for(i=n-2;i>=0;i--)
calc(i);
printf("%d",max);
}
int main()
{
	int i,j,n,max,f[26],g[26];
	/*g[i]???i??????*/
	/*f[i]????i?????????????????*/
	/*f[k]=max{f[i]:k+1<=j<=n&&g[i]<=g[k]}*/
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d",&g[i]);
		f[i]=0;
	}
	f[n]=1;
	for (i=n-1;i>=1;i--)
	{
		max=0;
		for (j=i+1;j<=n;j++)
			if ((g[j]<=g[i])&&(f[j]>max))
				max=f[j];
		f[i]=max+1;
	}
	max=0;
	for (i=1;i<=n;i++)
		if (f[i]>max)
			max=f[i];
	printf("%d\n",max);
	return 0;
}
int aa(int high[],int n,int k,int lh,int point)
{
	int remax=0,a=0,i;
	if(point==k-1)
	{
		if(lh>=high[k-1]) return 1;
		else return 0;
	}
	else
	{
		for (i=point;i<k;i++)
			if (high[i]<=lh)
			{
				a=aa(high,n+1,k,high[i],i+1)+1;
				if(a>remax) remax=a;
			}
		return remax;
	}
}

void main()
{
	int i,high[25],k;
	scanf("%d",&k);
	for(i=0;i<k;i++) scanf("%d",&high[i]);
	printf("%d",aa(high,0,k,32767,0));
}
int max(int *p,int num,int height)
{   int missile,case1,case2;
	if(num==1)
	{if(*p<=height)missile=1;
	else missile=0;}
	else
	{case1=max(p+1,num-1,*p)+1;
	case2=max(p+1,num-1,height);
	if(*p<=height&&case1>=case2)missile=case1;
	else missile=case2;
	}
	return(missile);
}
void main()
{
	int a[100],n,i,height=100000,H;
	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%d",&a[i]);
	H=max(a,n,height);
	printf("%d",H);
}
main()
{
      int k,i,j,max;
      scanf("%d",&k);
      int height[k];
      int num[k];
      for(i=0;i<k;i++)
      scanf("%d",&height[i]);
      num[k-1]=1;
      max=1;
         for(i=k-2;i>=0;i--)
         {                  
                           num[i]=0; 
                            for(j=k-1;j>i;j--)
                            {
                                 if(height[i]>=height[j]&&num[i]<num[j])
                                 num[i]=num[j];             
                            }
                            num[i]=num[i]+1;
                            if(num[i]>max)
                            max=num[i];
         }
         printf("%d\n",max);
         getchar();
         getchar();
      
}
int zui(int k,int m,int a[])
{
	int s=1,i=m+1,max=0;
	if(m==k) s=1;
	else
	{
	for(i=m+1;i<=k;i++)
	{
		if(a[k-m]<=a[k-i])
		{if(max<zui(k,i,a))
		{
			max=zui(k,i,a);
		}
		}
	}
	s=s+max;
	}
	return s;
}
int main()
{
	int i,k,a[25],max=0,s;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&a[i]);       
	}
    for(i=1;i<k;i++)
	{
		s=zui(k,i,a);
		if(s>max) max=s;
	}
	printf("%d",max);
	return 0;
}
int main()
{
	int n;
	int a[30],b[30];
	for(int i=0;i<30;i++)
	{
		a[i]=b[i]=1;
	}
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	
	for(int i=n-2;i>=0;i--)
	{
		int max=1;
		for(int j=i+1;j<n;j++)
		{
			if(a[i]>=a[j])
			{
				if(1+b[j]>max)
				max=1+b[j];
			}
		}
		b[i]=max;
	}
	int max=0;
	for(int i=0;i<n;i++)
	{
		if(b[i]>max)
		{
			max=b[i];
			
		}
	}
	cout<<max<<endl;
	return 0;
}
int main()
{
int k;
scanf("%d",&k);
int *a=(int *)malloc(sizeof(int)*k);
int i,j;
for(i=0;i<k;i++)
scanf("%d",&a[i]);
int count[30]={0};
int max;
max=0;
for(i=k-2;i>=0;i--)
{
for(j=i+1;j<k;j++)
{
if(a[j]<=a[i]&&count[i]<count[j]+1)
count[i]=count[j]+1;
}
}
for(i=0;i<k;i++)
{
if(max<count[i])
max=count[i];
}
printf("%d",max+1);
free(a);
return 0;
}
void sort(int *a,int i,int n) /*sort??a[i]?a[n]??????*/
{
  int j,k,t;
  for(j=i;j<n;j++)
  {
    for(k=j+1;k<=n;k++)
    {
      if(a[j]<=a[k])
      {t=a[j];a[j]=a[k];a[k]=t;}
    }
  }
}


main()
{
  int i,j,k,n;
  scanf("%d",&n);
  int *a=(int *)malloc(n*sizeof(int));
  int *jishu=(int *)malloc(n*sizeof(int));
  for(i=0;i<n;i++)
  {scanf("%d",&a[i]);jishu[i]=1;}
 
  for(i=n-2;i>=0;i--)
  {
    for(j=i+1;j<=(n-1);j++)
    {
      if(a[j]<=a[i]&&jishu[j]>=jishu[i])
      {
        jishu[i]=jishu[j]+1;
      }
    }
  }
  sort(jishu,0,n-1);
  printf("%d\n",jishu[0]);
  free (a);free (jishu);
  
}
int main() 
{ 
int h[25],b[25],k,i,j,m,n;
scanf ("%d",&k);
for (i=0;i<k;i++)
{
  scanf ("%d",&h[i]);  
  b[i]=1;
}
for (j=k-1;j>=0;j--)
  for (m=j+1;m<k;m++)
    {
       if (h[j]>=h[m]&&b[j]<(b[m]+1))
          b[j]=b[m]+1;           
    }
for (i=0;i<k-1;i++)
    b[i+1]=(b[i]>b[i+1])?b[i]:b[i+1];
n=b[k-1];        
printf ("%d",n);        
}
main()
{
     	int k,i,j,max,h[25],t[25];
     	scanf("%d",&k);
     	for(i=0;i<k;i++)
         	scanf("%d",&h[i]);
	for(i=0;i<k;i++)
		t[i]=1;
	for(i=k-2;i>=0;i--)
		for(j=i+1;j<k;j++)
			if(h[i]>=h[j]&&t[i]<=t[j])t[i]=t[j]+1;
	for(max=0,i=0;i<k;i++)
		if(t[i]>max)max=t[i];
	printf("%d",max);
}
int main()
{
	int k,a[25],i,b[25],j,p,max=0,q,t;
for(t=0;t<25;t++)b[t]=1;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	b[k-1]=1;
	for(j=k-2;j>=0;j--)
	{for(p=j+1;p<k;p++)
		{if(a[p]<=a[j]&&b[j]<b[p]+1)
		b[j]=b[p]+1;}}
	for(q=0;q<k;q++)
	{if(b[q]>max)max=b[q];}
	printf("%d",max);




		return 0;
}
void main()
{
	int a[26],i,j,k,n=25,m=0,t,d[26],f[26];
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		d[i]=1;
		f[i]=1;
	}
	for(i=n-1;i>0;i--)
	   for(k=i+1;k<=n;k++)
	   {
		   if(a[i]>=a[k])
		   {
			   for(j=i+1;j<n;j++)
				   if(a[i]>=a[j]&&d[j]>f[k])
					   f[k]=d[j];
		   d[i]=d[i]+f[k];
		   break;
		   }
	   }

	for(i=n;i>0;i--)
	{
		if(d[i]>m)
			m=d[i];
	}
	printf("%d",m);

}
int main()
{
	int k,i,j,max,a[30]={0},limit[30]={0},num[30]={0};
	scanf("%d",&k);
	for(i=k-1;i>=0;i--)
	{
		scanf("%d",&a[i]);
	}
	num[0]=1;
	limit[0]=a[0];
	for(i=1;i<k;i++)
	{
		max=1;
		for(j=0;j<i;j++)
		{
			if((a[i]>=limit[j]) && ((num[j]+1)>=max))
			{
				max=num[j]+1;
			}
		}
		limit[i]=a[i];
		num[i]=max;
	}
	max=0;
	for(i=0;i<k;i++)
	{
		if(num[i]>max) max=num[i];
	}
	printf("%d",max);
	return 0;
}
int main()
{
    int k;
    scanf("%d",&k);
    int a[25];
    int b[25];
    int i,j,max;
    for(i=0;i<k;i++)
    scanf("%d",&a[i]);
    b[k-1]=1;
    for(i=k-2;i>=0;i--)
    {
                       max=0;
                       for(j=i+1;j<=k-1;j++)
                       {
                                          if(a[j]<=a[i])
                                          {
                                                if(max<b[j])
                                                max=b[j];
                                          }
                       }
                       b[i]=max+1;
    }
    max=0;
    for(i=0;i<k;i++)
    {
                  if(max<b[i])
                  max=b[i];
    }
    printf("%d",max);
    getchar();
    getchar();
}
int k;
int h[25];
int l[25];
int main()
{
	cin >> k;
	int i, j;
	for (i = 0; i < k; i ++)
	{
		cin >> h[i];
		l[i] = 0;
	}
	l[0] = 1;

	for (i = 1; i < k; i ++)
	{
		int temp = -1;
		for (j = 0; j < i; j ++)
		{
			if (h[j] >= h[i] && l[j] + 1 > temp)
				temp = l[j] + 1;
		}
		if (temp == -1)
			l[i] = 1;
		else
			l[i] = temp;
	}
	int res = -1;

	for (i = 0; i < k; i ++)
	{
		if (l[i] > res)
			res = l[i];
	}
	cout << res << endl;


	return 0;
}
int main(int argc, char *argv[])
{
    int k;
    scanf("%d",&k);
    int i,j,h[26],amount[26],s=0;
    for(i=0;i<k;i++)
    {
      scanf("%d",&h[i]);
      amount[i]=1;
    }
    for(i=k-2;i>=0;i--)
    {
      for(j=i+1;j<k;j++)
      {
        if((h[i]>=h[j])&&(amount[i]<amount[j]+1))
          amount[i]=amount[j]+1;
      }
    }
    for(i=0;i<k;i++)
    {
      if(amount[i]>s)
        s=amount[i];
    }
    printf("%d\n",s);
  return 0;
}
int max(int sum[25],int x[25],int i,int j,int k)
{  
   int t,l=1;
   static int y[25];
   t=i+1;
   for(;t<=k-1;t++)
      if(t!=j&&x[i]>=x[t])
        {y[l]=sum[t];
         l++;
         }   
   for(i=1;i<l;i++)
      if(sum[j]<y[i])
        break;
   if(i==l)
     return(1);
   else
     return(0); 
}
main()
{
      int k,i,j;
      static int x[25],sum[25];
      scanf("%d",&k);
      for(i=0;i<k;i++)
         scanf("%d",&x[i]);
       sum[k-1]=1;
      for(i=k-2;i>=0;i--)
      { for(j=i+1;j<=k-1;j++)
            if(x[i]>=x[j]&&max(sum,x,i,j,k))
              sum[i]=sum[j];
         sum[i]++;
      }
      int m=sum[0];
      for(i=1;i<k;i++)
         if(sum[i]>m)
           m=sum[i];
      printf("%d",m);
}
int max(int a[],int m);
int s[30]={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,1,1,1,1,1};
void main()
{
	int a[100],k,i,n;
	scanf("%d",&k);
	for(i=k;i>0;i--)
		scanf("%d",&a[i]);
	a[k+1]=100000;
	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])
				t=1+max(a,i);
			if(t>s[m])
				s[m]=t;
		}
		return(s[m]);
	}
}
int main()
{
int  n,i,j,s=0,a[25],b[25];
scanf("%d",&n);
for(i=0;i<n;i++)
{
    scanf("%d",&b[i]);
}
for(i=0;i<n;i++)
{
  a[i]=0;
 for(j=0;j<=i;j++)
{
   if(b[i]<=b[j]&&a[i]<=a[j])
   {
    a[i]=a[j];
    }
}
a[i]++;
 if(s<a[i])
 {
 s=a[i];
 }
}
printf("%d",s);
return 0;
}
int a[30];
int len[30];
int main()
{
	int n;
	cin>>n;
	int i,j;
	for(i=1;i<=n;i++)
	{
      cin>>a[n-i+1];
	  len[i] = 1;
	}
    for(i=2;i<=n;i++)
		for(j=1;j<i;j++)
		{
			if(a[j]<=a[i]&&(len[j]+1>len[i]))
				len[i] = len[j] + 1;
		}
	int maxx=0;
	for(i=1;i<=n;i++)
	{
		if(len[i]>maxx)
			maxx= len[i];
	}
	cout<<maxx<<endl;
	return 0;
}
main()
{int n,i,k,j,x,y,max;
scanf("%d",&n);
int a[26],b[26];
for(i=n-1;i>=0;i--)
scanf("%d",&a[i]);
b[0]=1;
i=0;
while(i<=n-1)
{j=0;
x=0; 
while(j<i)
{if(a[j]<=a[i])
{
if(b[j]>=x)
x=b[j];}
j++;
}
b[i]=x+1;
i++	;
}
max=1;
for(i=0;i<=n-1;i++)
if(b[i]>=max)
max=b[i];
printf("%d",max);
}
int Max(int b[100],int n)
{
    int max=b[0];int i;
    for(i=0;i<n;i++)
    {
            if(b[i]>max)
            max=b[i];
    }
    return max;
}
int main()
{
    int k;
   scanf("%d",&k);
    int a[30],b[30]={0},d=0;
   for(int i=0;i<k;i++)
    {
    scanf("%d",&a[i]);
    }
    b[k-1]=1;
    int i,j;
    for(i=k-2;i>=0;i--)
    {
            int c[30]={0};
            d=0;
            for(j=i+1;j<k;j++) 
            {
            if(a[i]>=a[j])
            {
            c[d]=b[j];
            d++;
            }
            }
     b[i]=Max(c,d)+1;
     }
     int max=Max(b,k);
     printf("%d\n",max); 
}
int f(int a[],int k,int m){
int ans=1,tag=1,i;
if(m<k-1) for(i=m+1;i<k;i++)
if(a[i]<=a[m]&&tag<=f(a,k,i)){
ans=1+f(a,k,i);
tag=f(a,k,i);}
return ans;}
int main(){
int a[25],k,i,max;
scanf("%d",&k);
for(i=0;i<k;i++)
scanf("%d",a+i);
max=f(a,k,0);
for(i=1;i<k;i++)
if(f(a,k,i)>max)
max=f(a,k,i);
printf("%d",max);
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]&&high[m]<high[point+1]) sum1++;
			for(m=point+2,sum2=0;m<n;m++)
				if(high[m]>high[point]&&high[m]<=high[point+1]) 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 main()
{
    int k,i,j,max;
    scanf("%d",&k);
    int a[k],b[100];
    for(i=0;i<k;i++)
    scanf("%d",&a[i]);
    b[0]=1;
    max=1;
    for(i=1;i<k;i++)
    {
       b[i]=1;
       for(j=0;j<i;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);
    getchar();
    getchar();
}
int b[MAX_N + 10];
int aMaxLen[MAX_N + 10];
int main()
{	
	int N,i,j;
	scanf("%d",&N);
	for( i = N;i >= 1;i -- )
		scanf("%d", & b[i]);
	aMaxLen[1] = 1;
	for( i = 2; i <= N; i ++ )
	{ 
		int nTmp = 0;  
		for( 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 <= N;i ++ )
		if( nMax < aMaxLen[i])
			nMax = aMaxLen[i];
	printf("%d\n", nMax);
	return 0;
}
int k;
int num[26];
int val[26];
int main()
{

	
	cin>>k;
	for(int i=0;i<k;i++)
	{
		cin>>num[i];
		val[i]=0;
	}
	//for(int i=0;i<k;i++)
	//	cout<<num[i]<<endl;
	for(int i=k-1;i>=0;i--)
	{
		if(i==k-1)
			val[i]=1;
		else
		{
			int temp=0;
			for(int j=i;j<k;j++)
			{
				if(num[i]>=num[j]&&val[j]>=temp)
				{
					temp=val[j];
	//				cout<<num[i]<<" "<<num[j]<<" "<<temp<<endl;
				}
			}
			val[i]=temp+1;
		}
		
		
	}
int sum=0;
for(int i=0;i<k;i++)
{
	//cout<<val[i]<<endl;
		if(val[i]>=sum)
			sum=val[i];
}
cout<<sum<<endl;

return 0;

}
int max (int a,int b)
{
	if(a < b)
		return b;
	else
		return a;
}
int main()
{
	int num;
	int h[100];
	cin >> num;
	int i,j,k;
	for(i = 0; i < num; i ++)
		cin >> h[i];
	int f[100] = {0};
	f[0] = 1;
	for(i = 1; i  < num; i++)
	{
		f[i] = 1;
		for(j = 0; j < i; j ++)
		{
			if(h[i] <= h[j])
				f[i] = max(f[i],f[j]+1);
		}
	}
	int result = f[0];
	for(i = 1; i  < num; i ++)
	{
		result = max(f[i],result);
	}
	cout << result<<endl;
}
int main()
{
	int n;
	scanf("%d",&n);
	int a[25];
	int b[25];
	int max;
	for(int i=0;i<n;i++)
	{
		b[i]=1;
		scanf("%d",&a[i]);
	}
	for(int i=n-1;i>=0;i--)
	{
		for(int j=i;j<n;j++)
		{
			if(i!=j&&a[i]>=a[j]&&b[i]<1+b[j])
			{
				b[i]=b[j]+1;
			}
		}
	}
	max=b[0];
	for(int i=0;i<n;i++)
	{
		if(b[i]>max)
			max=b[i];
	}
	printf("%d\n",max);
}
int max(int a[],int n,int high)
{
  int c,b;
  if(n==0)
     {
        if(a[0]>high) return 0;
        else return 1; 
      }
  else 
       if(a[n]>high)
          return max(a,n-1,high);
       else
         {
            c=max(a,n-1,a[n])+1;
            b=max(a,n-1,high);
            if(c>b) return c;
            else return b; 
         }
}
main()
{
  int n,i;
  int a[25];
  scanf("%d",&n);
  for(i=0;i<n;i++)
     scanf("%d",&a[n-i-1]);
  printf("%d",max(a,n,32767));
}
main()
{
      int a[25],b[25],c[25],i,j,n,max=0,q;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
                      a[i]=0;
                      b[i]=0;
      }
      for(i=0;i<n;i++)
      {
                      scanf("%d",&a[i]);
      }
      
      for(i=n-1;i>=0;i--)
      {
                         for(j=i;j<n;j++)
                         {
                                         if(a[i]>=a[j])
                                         {
                                                       c[j-i]=b[j]+1;
                                         }
                                         else
                                         {
                                             c[j-i]=1;
                                         }
                         }
                         for(j=0;j<n-i;j++)
                         {
                                           if(c[j]>=b[i])
                                           b[i]=c[j];
                         }
      }        
      for(i=0;i<n;i++)
      {
                      if(b[i]>=max)
                      max=b[i];
      }
      printf("%d",max);
}
int main()
{
int k,i,j,a[25]={0},b[25]={0},max;
scanf("%d",&k); 
for(i=0;i<k;i++)
scanf("%d",&a[i]); 
for(j=k-1;j>=0;j--)   
{   
    max=0; 
    for(i=j+1;i<k;i++)
    {  
        if(a[i]<=a[j])
        {
         if(b[i]>max)
         max=b[i];
         } 
    }
    b[j]=max+1; 
} 
for(i=0;i<k;i++)
{if(b[i]>max) max=b[i];} 
printf("%d",max);

return 0 ;   
}
int Height[26];  
int MaxLen[26];  
  
void LIS(int k){  
    memset(MaxLen,0,sizeof(MaxLen));  
    for(int i = 1;i <= k; i++){  
        MaxLen[i] = 1;  
        
        for(int j = 1;j < i;j++){  
            
            if(Height[i] <= Height[j]){  
                 
                int preMax = MaxLen[j] + 1;  
                if(preMax > MaxLen[i]){  
                    MaxLen[i] = preMax;  
                }  
            }  
        }  
    }  
}  
   
int main()  
{  
    int N,i;  
    scanf("%d",&N);  
        
        for(i = 1;i <= N;i++){  
            scanf("%d",&Height[i]);  
        }  
        LIS(N);  
        int Max = -1;  
        
        for(i = 1;i <= N;i++){  
            if(Max < MaxLen[i]){  
                Max = MaxLen[i];  
            }  
        }  
        if(N != 0){  
            printf("%d\n",Max);  
        }  
    
    return 0;  
}
void main()
{
    int i,j,k,t,a[10000],f[10000],ans=0;
    scanf("%d",&k);
    for (i=1;i<=k;i++) {
    	scanf("%d",&a[i]);
    	t=0;
    	for (j=1;j<i;j++) 
    	  	if (a[i]<=a[j] && f[j]>t)
    	  	 	t=f[j];
    	f[i]=t+1;
    	if (f[i]>ans) ans=f[i];
    }
    printf("%d\n",ans);
    return 0;
}
main()
{
	int k,a[26],i;
	int check(int a[26],int k);
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	printf("%d",check(a,k));
}
int check(int a[26],int k)
{
	int i,j,m,b[26];
	for(i=0;i<k;i++)
	{
		for(j=0,m=0;j<i;j++)
			if(a[j]>=a[i])
				if(b[j]>m)
					m=b[j];
		if(m==0)
			b[i]=1;
		else
			b[i]=m+1;
	}
	for(i=0,m=0;i<k;i++)
		if(b[i]>m)
			m=b[i];
	return m;
}
/*************
 * ???????
 * ???2010.10.12
 * ?????1000012923
**************/


int calc(int*,int,int);

int main(){
	int k,h[25],i=0;
	cin>>k;
	while(cin>>h[i]){
		i++;
		if(i==k)break;
	}
	cout<<calc(h,k,(1<<31-1));
}

int calc(int* h,int k,int limit){
	int i,ret=0,t=0;
	for(i=0;i<k;i++){
		if(h[i]>limit)continue;
		t=1+calc(h+i+1,k-i-1,h[i]);
		if(t>ret)ret=t;
	}
	return ret;
}
int a[25];
int n;

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


int max(int chu)
{
	int z=1,tempj;
	int i,j,k;
	
	if(chu==n-1) z=1;
	else{
			for(j=chu+1;j<n;j++)
			{
				if(a[j]>a[chu]) continue;
				tempj=1+max(j);
				z=tempj>z?tempj:z;
				tempj=0;
				
			}
			
		}
	
	return z;
}
void main()
{
	int n,a[100]={0},maxlen[100]={0},i,j,temp,temp2=1,temp3;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	for(i=0;i<n;i++)
	{
		temp2=1;
		if(i==0)maxlen[i]=1;
		else
		{
			temp3=0;
			for(j=i-1;j>=0;j--)
			{   
				if( a[j]>=a[i])
				{
					if(maxlen[j]>maxlen[temp3])
					temp3=j;
					temp2=0;
					
				}
			}
			maxlen[i]=maxlen[temp3]+1;
			if(temp2==1)maxlen[i]=1;
		}
	}
	temp=0;
	for(i=0;i<n;i++)
		if(maxlen[i]>maxlen[temp])
		temp=i;
	printf("%d",maxlen[temp]);
}
int max(int x,int y);
int max(int x,int y)
{
	int z;
	if(x>y)
		z=x;
	else
		z=y;
	return(z);
}

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

	int cMax=c[0];
	{
		for(i=0;i<=k-1;i++)
		{
			cMax=cMax>c[i]?cMax:c[i];
		}
		printf("%d",cMax);
	}
	return 0;
}