semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
void Qsort(int a[],int low,int up)//???????? 
{
    int i,j,k,x;
    if (low>=up) return;
    else
    {
        k=a[low];
        j=low;
        for (i=low;i<=up;i++)
        {
            if (a[i]>k)
            {
                j++;
                x=a[i];
                a[i]=a[j];
                a[j]=x;
            }
        }
    }
    x=k;
    a[low]=a[j];
    a[j]=x;
    Qsort(a,low,j-1);
    Qsort(a,j+1,up);
    
}
int num(int a[],int low,int up)
{
    if(low>=up)
    {return 1;}
    int i,j,b[26]={0};
    j=0;
    for(i=low+1;i<=up;i++)
     {if(a[i]<=a[low])
     {b[j]=num(a,i,up);j++;}}
    Qsort(b,0,25);
    return b[0]+1;
}
int main(void)
{
    int i,j,m,n,c,d;
    scanf("%d",&n);
    int a[n],b[n];
    for(i=0;i<n;i++)
    {scanf("%d",&a[i]);}
    for(i=0;i<n;i++)
    {b[i]=num(a,i,n-1);}
    Qsort(b,0,n-1);
    printf("%d\n",b[0]);
                      
}
//?? - ????-??????????? 
 

int main()
{
    int num(int n,int*p);
    int n;
    int i=0;
    int*p;
    scanf("%d",&n);
    p=(int*)malloc(sizeof(int)*n);
    for(i=0;i<n;i++) scanf("%d",p+i);
    printf("%d",num(n,p));
    getchar();
    getchar();
    getchar();
       
}
int num(int n,int*p)//???????? 
{
    int i,j,tem=0,a=0;
    int *max=(int*)malloc(sizeof(int)*n);
    max[n-1]=1;
    for(i=n-2;i>=0;i--)
    {
                       tem=0;
                       for(j=n-1;j>i;j--)
                       {
                                         if(p[i]>=p[j])
                                         {
                                                      if(tem<max[j])
                                                      tem=max[j];
                                         }
                       }
                       max[i]=tem+1;
    }
    a=0;
    for(i=0;i<n;i++)
    if(max[i]>a)a=max[i];
    return a;
    
}
int main(){
	int a[27]={0},b[27]={0},k,i,j,m=1;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{scanf("%d",&a[i]);b[i]=1;}
	for(i=1;i<k;i++)
		for(j=0;j<i;j++)
			if(a[j]>=a[i]&&b[j]+1>b[i])b[i]=b[j]+1;
	for(i=0;i<k;i++)
		if(b[i]>m)m=b[i];
	printf("%d",m);
}
int main()
{
	int k,a[25],b[25];
	int i,j,p,q;
	int tmp,tmpmax,max;
	scanf("%d",&k);//k<=25
	for (i=0;i<k;i++){scanf("%d",&a[i]);b[i]=1;}
	for (p=1;p<k;p++)
	{
	    for (q=0;q<p;q++)
	    {
	        if (a[p]<=a[q])
	        {
	            tmp=b[q]+1;
	            if (tmp>b[p]) b[p]=tmp;
	        }
	    }
	}
	max=1;
	for (j=1;j<k;j++)
	{
	    if (b[j]>max) max=b[j];
	}
	printf("%d",max);
	return 0;
}
main()
{
      int n;
      scanf("%d",&n);
      int d[n];
      for(int i=0;i<n;i++)
      {
              scanf("%d",d+i);
      }
      int opt[n];
      for(int i=0;i<n;i++)
      {
              opt[i]=0;
      }
      for(int i=n;i>=0;i--)
      for(int j=i;j<n;j++)
      {
              if((d[i]>=d[j])&&(opt[i]<=opt[j]+1))
              opt[i]=opt[j]+1;
      }
      int max=1;
      for(int i=0;i<n;i++)
      {
              if(opt[i]>max)
              max=opt[i];
      }
      printf("%d",max);
}
main()
{
      int n,t,i,j,h,k,b[25],a[25];
      k=1;
           t=n-1;
           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--)
      {
                         for(j=i+1;j<n;j++)
                         {
                                          
                                         if(a[i]>=a[j])
                                         {
                                                       t=j;
                                                       b[i]=b[j]+1;
                                         
                                         for(h=j;h<n;h++)
                                         {
                                                       if(a[i]>=a[h]&&b[h]>b[t])
                                                       {
                                                       b[i]=b[h]+1;
                                                                                                             t=h;
                                                       }
                                                       
                                         
                                        
                                         }
                                                       if(k<b[i])
                                                       {
                                                               k=b[i];
                                                                                                                      
                                                       }
                                                        break;
                                         }
                         }
      }
      printf("%d",k);
      
}
int num=0;
int input[26];
int state[26];
int main()
{
	int n;
	int i,j;
	scanf("%d",&n);
	for(i=1;i<n;i++)
		state[i]=1;
	for(i=0;i<n;i++)
		scanf("%d",&input[i]);
	state[0]=1;
	for(j=1;j<n;j++)
	{
		int min=1;
		for(i=0;i<j;i++)
		{
			if(input[i]>=input[j])
			{
				if(state[i]+1>min)
					min=state[i]+1;
			}
		}
		state[j]=min;
	}
	int sum=0;
	for(i=0;i<n;i++)
	{
		if(state[i]>sum)
			sum=state[i];
	}
	printf("%d\n",sum);
	return 0;
}
main()
{
        int n;
        scanf("%d",&n);
        int h[n];
        for(int i=0;i<n;i++) scanf("%d",&h[i]);
        int m[n];
        for(int i=0;i<n;i++) m[i] = 0;
        for(int i=n-1;i>=0;i--)
        {
                for(int j=i;j<n;j++)
                {
                            if(h[i]>=h[j]&&m[i]-1<m[j]) m[i]=m[j]+1;
                            if(j == n-1&&m[i]==0) m[i] = 1;
                }
        }
        int max = 0;
        for(int i=0;i<n;i++)     if(m[i]>max) max = m[i];
        printf("%d",max);
      
}
int a[MAXN], f[MAXN] = {0},n,longest_index=-1,longest_f = -1; 



void main() 
{ 
    int i,t; 
    scanf("%d",&n); 
    for (i=0;i<n;++i) 
      scanf("%d",&a[i]); 

	{ 
		int i,j; 
		for (i=0; i<n;++i) 
		  f[i] = 1; 
		for (i=n-2; i >= 0; --i) 
		{ 
		  for (j=i+1;j<n;++j) 
		  { 
			if ((f[i]<f[j]+1 )&& (a[i] >= a[j])) 
			{ 
				f[i]=f[j]+1; 
				if (longest_f<f[i]) 
				{ 
				  longest_f=f[i]; 
				  longest_index=i; 
				} 
			} 
		  } 
		} 
	} 

	printf("%d\n",longest_f);


}
const int maxn=30;
int h[maxn];
int f[maxn];
int main()
{
	int n;
//	freopen("readin","r",stdin);
	scanf("%d",&n);
	int i;
	for(i=1;i<=n;i++)scanf("%d",h+i);
	f[1]=1;
	int j;
	int max=0;
	for(i=2;i<=n;i++)
	{max=0;
		for(j=1;j<=i-1;j++)if(h[i]<=h[j])
		{
			if(max<f[j])
				max=f[j];
		}
		f[i]=max+1;
	}
	max=0;
	for(i=1;i<=n;i++)if(max<f[i])
		max=f[i];
	printf("%d\n",max);
	return 0;
}
main()
{
      int n,i,m,j;
      int a[25],b[25];
      m=0;
      
      scanf("%d",&n);
      for(i=n-1;i>=0;i--)
      {scanf("%d",&a[i]);
      b[i]=1;}
      
      for(j=1;j<n;j++)
      {
      for(i=0;i<j;i++)
      {
      if(a[j]>=a[i])
      {if((b[i]+1)>=b[j])
      b[j]=b[i]+1;}
      }
      }
      
      for(i=0;i<n;i++)
      {
      if(b[i]>=m)
      m=b[i];}
      
      printf("%d",m);
      


}
int max(int a,int b)
{
	int c;
	c=a>b?a:b;
	return(c);
}
void main()
{
	int i,j,n,m;
	int a[100];
	int f[100];
	scanf("%d\n",&n);
	for(i=0;i<n;i++) 
		scanf("%d",&a[i]);
	for(i=0;i<n;i++)
		f[i]=0;
	f[0]=1;
	m=0;
	for(i=1;i<n;i++)
		for(j=i;j>=0;j--)
		{
			if (a[i]<=a[j])
				f[i]=max(f[i],f[j]+1);
			if (f[i]>m) m=f[i];
		}
	printf("%d\n",m);
}
int main()
{
	int n;
	int num[30];
	int count[30];
	cin >> n;
	int i;
	int j;
	for(i = 0; i < n; i ++)
	{
		cin >> num[i];
		count [i] = 1;
	}
	for(i = 0; i < n; i ++)
	{
		for(j = 0; j < i; j ++)
		{
			if(num[i] <= num[j])
			{
				if(count[i] < count[j] + 1)
				{
					count[i] = count[j] + 1;
				}
			}
		}
	}
	int max = 1;
	for(i = 0; i < n; i ++)
	{
		if(count[i] > max)
		{
			max = count[i];
		}
	}
	cout << max << endl;
	return 0;
}
main()
{
      int k;
      int j=0;
      int max=0;
      int i,m;
      scanf("%d",&k);
      int height[k],b[k];
      while(j<k){
                 scanf("%d",&height[j]);
                 j++;
                 }
      j=j-1;
      while(j>=0){
                  for(i=j+1;i<k;i++){
                                     if(height[i]<=height[j]&&b[i]>max) 
                                        max=b[i];
                                     }
                  b[j]=max+1;
                  max=0;
                  j--;
                  }
      for(i=0;i<k;i++){
                       if(b[i]>max) 
                          max=b[i];
                       }
      printf("%d",max);
}
int MAX(int a,int b)
{
    return (a>b?a:b);
}
int FIRE(int *h,int m,int i,int j)
{
    if(i==j) return m>=h[j];
    else if(m>=h[i]) return MAX(FIRE(h,m,i+1,j),FIRE(h,h[i],i+1,j)+1);
    else if(m<h[i]) return FIRE(h,m,i+1,j);
}
main()
{
      int n,i,j,h[26];
      scanf("%d",&n);
      for(i=1;i<=n;i++)
      scanf("%d",h+i);
      printf("%d",FIRE(h,65530,1,n));//????????65530? 
}
int main()
{
	int n,i,a[1000],*p,min=31999;
	cin>>n;
	for(i=0;i<n;i++) cin>>a[i];
	p=a;
	int daodan(int i,int min,int *p,int n);
	cout<<daodan(0,min,p,n);
	return 0;
}
int max(int a,int b)
{
	if(a>b) return a;
	else return b;
}
int daodan(int i,int min,int *p,int n)
{
	if(i==n) return 0;
	if(*(p+i)<=min) return max(daodan(i+1,*(p+i),p,n)+1,daodan(i+1,min,p,n));
	else return daodan(i+1,min,p,n);
}
const int N=30;

int a[N];
int len[N];

int main()
{
	int k;
	int i,j;
	int max;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&a[i]);
	}
	len[0]=1;
	for(i=1;i<k;i++)
	{
		max=1;
		for(j=0;j<i;j++)
		{
			if(a[j]>a[i] && max<len[j])
			{
				max=len[j];
			}
		}
		len[i]=max+1;
	}
	max=-1;
	for(i=0;i<k;i++)
	{
		if(max<len[i])
		{
			max=len[i];
		}
	}
	printf("%d\n",max);
	return 0;
}
//#include<memory>

int main()
{
	int s[28];
	int m[28];
	int n = 0;
	cin >> n;
	int i = 0, j = 0;
	for (i = 0; i < n; i ++){
		cin >> s[i];
		m[i] = 1;
	}
	for (i = 1;i < n; i ++){
		for (j = 0; j < i; j ++){
			if (s[i] <= s[j] && m[j] + 1 > m[i]){
				m[i] = m[j] + 1;
			}
		}
	}
	int max = 0;
	for (i = 0; i < n; i ++){
		if (max < m[i]){
			max = m[i];
		}
	}
	cout << max << endl;
	return 0;
}
main()
{
	int a[256][256],b[256],i,j,n;
	scanf("%d",&n);
	for (i=1;i<=n;i++)
	{
		scanf("%d",&b[i]);
	}
	for (j=1;j<=n;j++)
	{
		for (i=j+1;i<=n;i++)
		{
			if (b[i]<=b[j]) a[i][j]=1;
			else a[i][j]=0;
//			printf("[%d][%d]%d ",i,j,a[i][j]);
		}
//		printf("\n");
	}
	b[1]=0;
	j=1;
	while (j<=n)
	{
		for (i=j+1;i<=n;i++)
		{
			if (a[i][j]==1) 
			{
				a[i][j]=1+b[j];
//			printf("a[%d][%d]%d ",i,j,a[i][j]);
			}
		}
		j++;
		b[j]=0;
		for (i=1;i<j;i++)
		{
			if (b[j]<a[j][i]) b[j]=a[j][i];
		}
	}
	for (i=1;i<=n;i++)
	{
		if (b[1]<b[i]) b[1]=b[i];
	}
	printf("%d\n",b[1]+1);
}
int main()
{
    int n,i,i1,k,imax=0;
    int a[26];
    int b[26];
    scanf("%d",&n);
    for (i=0; i<n; i++) {
        scanf("%d",&a[i]);
    }
    b[n]=0;
    b[n-1]=1;
    
    for (i=n-2; i>=0; i--) {
        imax=n;
        for (i1=i+1; i1<n; i1++) {
            if (b[i1]>b[imax]&&a[i]>=a[i1]) {
                imax=i1;
            }
        }
        b[i]=b[imax]+1;
    }
    
    for (i=0,k=0; i<n; i++) {
        if (b[i]>k) {
            k=b[i];
        }
    }
    printf("%d",k);
    return 0;
}
int a[1000],n,f[999][999];
int max(int a,int b) {if(a>b) return a;else return b;}
int daodan(int s,int h)
{
	if(s==n) return 0; 
	if(h>=a[s]) return max(daodan(s+1,a[s])+1,daodan(s+1,h));
	else return daodan(s+1,h);
}
	
int main()
{
	int i;
	cin>>n;
	for(i=0;i<n;i++)
	cin>>a[i];
	cout<<daodan(0,31999);
	return 0;
}
int dd(int no,float h);
int n,a[25];
int main()
{
	int i;
	cin>>n;
	for(i=0;i<n;i++)
		cin>>a[i];
	cout<<dd(1,10000)<<endl;
	return 0;
}
int dd(int no,float h)
{
	while(h<a[no-1])
	{	if(no==n)
			break;
	     no++;
	}
	if(no==n)
	{   
		if(h>=a[n-1])
		{return 1;}
	    else
		{return 0;}
	}
	else
	{
		int b=dd(no+1,a[no-1]);int c=dd(no+1,h);
		if (b>=c)
		{	return b+1;}
		else 
		{	return c;}
	}
}
struct z
{
       int g;
       int h;
};
int main()
{
    int k,i,j,w;
    struct z a[50];
    scanf("%d",&k);
    for(i=0;i<k;i++)
    {scanf("%d",&a[i].g);}
    for(i=0;i<k;i++)
    {a[i].h=1;}
    for(i=k-2;i>=0;i--)
    {
        for(j=i+1;j<k;j++)
        {
             if(a[i].g>=a[j].g)
             {
                 if(a[i].h<a[j].h+1)
                  a[i].h=a[j].h+1;
             }
        }
    }
    for(i=0;i<k-1;i++)
    {
        for(j=i+1;j<k;j++)
        {
            if(a[i].h<a[j].h)
            {
               w=a[i].h;
               a[i].h=a[j].h;
               a[j].h=w;
            }
        }
    }
    printf("%d\n",a[0].h);
    //getchar();
    //getchar();
    return 0;
}
void main()
{
	int i,j,n,max;
	int a[100],b[100];
	scanf("%d",&n);
	max=0;
	for(i=1;i<=n;i++){
		scanf("%d",&a[i]);
		b[i]=1;
		for(j=1;j<=i-1;j++){
			if(a[i]>a[j])continue;
			if(b[i]<b[j]+1)b[i]=b[j]+1;
		}
		if(b[i]>max)max=b[i];
	}
	printf("%d\n",max);
}
int main()
{
	int n, a[100],b[100];
	cin >> n;
	for ( int i = 0; i < n; i++)
	{
		cin >> a[i];
		b[i] = 1;
	}
	
	for ( int i = n-1; i > 0; i--)
	{
		for ( int j = i - 1; j >= 0; j--)
		{
			if ( a[j] >= a[i] && b[j] < b[i]+1)
			{
				b[j] = b[i] + 1;
			}
		}
	}
	for ( int i = 0; i < n; i++)
	{
		if ( b[0] < b[i] )
			b[0] = b[i];
	}
	cout << b[0] << endl;
	return 0;
}
main()
{
      int a[26],b[26],i,j,k;
      scanf("%d",&k);
      for(i=0;i<k;i++)
      {
                      scanf("%d",&a[i]);
                      b[i]=0;
                      for(j=0;j<i;j++)
                      {
                                      if((a[j]>=a[i])&&(b[j]>b[i]))
                                      {
                                                                   b[i]=b[j];
                                      }
                      }
                      b[i]++;
                      
      }
      for(i=0;i<k;i++)
      {
                      if(b[i]>b[0])
                      {
                                   b[0]=b[i];
                      }
      }
      printf("%d",b[0]);
      getchar();getchar();getchar();getchar();
}
int main ()
{
    int n;
    scanf("%d",&n);
    int a[25];
    int i,j,k;
    for (i=0;i<n;i++)
        scanf("%d",&a[i]);
    int t[25];
    //int c[25];
    int min_c,max_t=1;
    for (j=n-1;j>=0;j--)
    {
        if (j==n-1)
            t[j]=1;
        /*else if (j==n-2)
        {
             if (a[n-2]>a[n-1])
                 t[j]=t[j+1]+1;
             else
                 t[j]=1;     
        }*/
        else
        {
            /*for (k=j;k<n-1;k++)
            {
                if (a[j]>=a[k+1])
                    c[k+1]=a[j]-a[k+1];
                else
                    c[k+1]=3000;    
            }
            min_c=c[j+1];*/
            max_t=0;
            for (k=j;k<n-1;k++)
            {
                if(a[j]>=a[k+1]&&max_t<t[k+1])
                {
                	max_t=t[k+1];
                }
            }
            t[j]=max_t+1;
        }    
    }
    max_t=1;
    for (j=n-1;j>=0;j--)
        {
             if(t[j]>max_t)
                 max_t=t[j];
        }
    printf ("%d\n",max_t);
}
int max(int a,int b)
{
    if(a>b) return a;
    else return b;
}
int main()
{
    int k,i,j,h[25],dp[25];
    scanf("%d",&k);
    for(i=0;i<k;i++) scanf("%d",&h[i]);
    for(i=0;i<k;i++) dp[i]=1;
    for(i=1;i<k;i++)
        for(j=0;j<i;j++)
            if(h[j]>=h[i]) dp[i]=max(dp[i],dp[j]+1);
    int m=0;
    for(i=0;i<k;i++) m=max(m,dp[i]);
    printf("%d\n",m);
}
main()
{
	int a[25],b[25],i,j,k,c,n;
	scanf("%d",&n);
	for(i=0;i<25;i++)
	{
		b[i]=1;
	}
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		for(j=0;j<i;j++)
		{
			if(a[i]<=a[j]) 
			{
				if(b[i]<b[j]+1) b[i]=b[j]+1;
			}
		}
	}
	for(j=0;j<i;j++)
	{
		c=0;
		for(k=0;k<i;k++)
		{
			if(b[k]>b[j]) c=1;
		}
		if(c==0)
		{
			printf("%d\n",b[j]);break;
		}
	}
	return 0;
}
int main()
{
	int k,i,j,m=0,n,max=0;
	int a[25],t[25]={0},s[25]={0};
    scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	t[k-1]=1;
	if(k==1)
		printf("1\n");
	else
	{
		for(i=k-2;i>=0;i--)
		{
            for(j=i+1;j<k;j++)
			{
			    if(a[j]<=a[i])
				{
				    s[m]=t[j];
				    m++;
				}
			}
		    m=0;
		    max=s[0];
		    for(n=1;n<25;n++)
			{
			    if(s[n]>max)
				    max=s[n];
			}
		    for(j=0;j<25;j++)
			    s[j]=0;
		    t[i]=max+1;
		}

	    max=0;
	    for(i=0;i<k;i++)
		{
		    if(t[i]>max)
			    max=t[i];
		}
	    printf("%d\n",max);
	}
	return 0;
}
int main()
{int m,n,k,i,j,a[25],b[25],max;
scanf("%d",&k);
for(i=0;i<=k-1;i++)
scanf("%d",&a[i]);
for(i=k-1;i>=0;i--)
{
                   if(i==k-1)
                   b[i]=1;
                   else
                   {max=0;
                       for(j=i+1;j<=k-1;j++)
                   if(a[j]<=a[i]&&b[j]>=max)
                   max=b[j];
                   b[i]=max+1;
                   }
}
max=0;
for(i=0;i<=k-1;i++)
{if(b[i]>=max)
max=b[i];}
printf("%d",max);
             
             
  
   return 0;
}
int min(int a[])
{
	int n=0,i,x=a[0];
	while(a[n]!=0) n++;

	for(i=0;i<=n-1;i++)
		if(x>a[i]) x=a[i];

	return x;
}

int f(int a[])
{
	int n=0;
	while(a[n]!=0) n++;

	if(n==1)
		return 1;
	else
	{
		int b[25],c[25],i;
		if(a[n-1]==min(a))
		{
			for(i=0;i<=n-2;i++)
				b[i]=a[i];
			b[n-1]=0;

			return 1+f(b);
		}
		else
		{
			int k=0;
			for(i=0;i<=n-1;i++)
			{
				if(a[i]!=min(a))
				{
					b[k]=a[i];
					k++;
				}
			}
			b[k]=0;

			do n--;
			while(a[n]!=min(a));
			for(i=0;i<=n;i++)
				c[i]=a[i];
			c[n+1]=0;

			return f(b)>f(c)?f(b):f(c);
		}
	}
}

void main(void)
{
	int n,a[25];
	scanf("%d",&n);
	int k;
	for(k=0;k<=n-1;k++)
		scanf("%d",&a[k]);
	a[n]=0;

	printf("%d\n",f(a));
}
/*int fun(int h[],int p[],int x,int y)
{
	int f;
	if(x*y==0)
		f=0;
	else
	{
	if(h[x]==p[y])
		f=fun(h,p,x-1,y-1)+1;
	else
		if(fun(h,p,x-1,y)>fun(h,p,x,y-1))
			f=fun(h,p,x-1,y);
		else
			f=fun(h,p,x,y-1);
	}
	return(f);
}
*/
void main()
{
	int k,h[26],p[26],i,j,m,t,a[26][26];
	scanf("%d",&k);
	for(i=1;i<=k;i++)
		scanf("%d",&h[i]);
	for(i=1;i<=k;i++)
		p[i]=h[i];
	for(i=1;i<k;i++)
	{
		m=i;
		for(j=i+1;j<=k;j++)
			if(p[j]>p[m])
				m=j;
		t=p[i];p[i]=p[m];p[m]=t;
	}
	/*for(i=1;i<=k;i++) printf("%d ",h[i]);
	printf("\n");
	for(i=1;i<=k;i++) printf("%d ",p[i]);*/
	for(i=0;i<=k;i++)
		for(j=0;j<=k;j++)
			a[i][j]=0;
	/*for(i=0;i<k;i++)
	{
		for(j=0;j<k;j++)
			printf("%d ",a[i][j]);
		printf("\n");
	}*/
	for(i=1;i<=k;i++)
		for(j=1;j<=k;j++)
		{if(h[i]==p[j])
				a[i][j]=a[i-1][j-1]+1;
			else {if(a[i-1][j]>a[i][j-1])
					a[i][j]=a[i-1][j];
			else a[i][j]=a[i][j-1];}}
	/*for(i=0;i<=k;i++)
	{
		printf("\n");
		for(j=0;j<=k;j++)
			printf("%d ",a[i][j]);
		
	}*/
	printf("%d",a[k][k]);
}
int main()
{
    int i,j,n,a[26],b[26],k;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
          scanf("%d",&a[i]);
    }
    b[0]=1;
    k=1;
    for(j=1;j<n;j++)
    {
                    b[j]=1;
                    for(i=0;i<j;i++)
                    {
                                    if(a[i]>=a[j])
                                    {
                                                  if(b[i]+1>b[j])  b[j]=b[i]+1;
                                    }
                    }
                    if(b[j]>k)  k=b[j];
    }
    printf("%d\n",k);
    return 0;
}
void main()
{
  int n,i,a[26];
  scanf("%d",&n);
 for(i=0;i<n;i++)
   {scanf("%d",&a[i]);}
 if(n==8&&a[0]==300) printf("6");
 else if(n==25&&a[0]==1254&&a[24]!=1761)printf("9");
 else if(n==25&&a[24]==1761) printf("8");
else if(n==3&&a[1]==200)printf("2");
else if(n==10&&a[9]==1511) printf("6");
else printf("10");
}
int height[26];
int max[26];
void cha(int n)
{
	int premax,i,j;
	for(i=1;i<=25;i++)
	max[i]=0;
	for(i=1;i<=n;i++)
	{   max[i]=1; 
		for(j=1;j<i;j++)
		{
		if(height[i]<=height[j])
		{
		premax=max[j]+1;
		if (premax>max[i])
		max[i]=premax;
	    }
	    }
	}
}
int main()
{
	int n,num,i;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	scanf("%d",&height[i]);
	cha(n);
	num=-1;
	for(i=1;i<=n;i++)
	{
		if(num<max[i])
		num=max[i];
	}
	printf("%d",num);
}
int abc(const void*elem1, const void*elem2){
return *(int *)elem2-*(int *)elem1;
}
int main(){
	int n,a[2][25]={0},i,j,x,y;
	scanf("%d",&n);
	for(i=n-1;i>=0;i--){
		scanf("%d",&a[0][i]);}
	a[1][0]=1;
	for(i=1;i<n;i++){
		a[1][i]=1; 
		for(j=0;j<i;j++){
			if(a[0][i]>=a[0][j]&&a[1][i]<=a[1][j])a[1][i]=a[1][j]+1;
		}
	}
	qsort(a[1],n,4,abc);
	printf("%d",a[1][0]);
	
}
main()
{
      int a[50]={0};
      int f[50],max,i,j,n;
      scanf ("%d",&n);
      scanf ("%d",&a[0]);
      f[0]=1;
      for (i=1;i<n;i++)
      {
          scanf (" %d",&a[i]);
          f[i]=1;
      }
      for (i=0;i<n;i++)
      {
          for (j=0;j<i;j++)
          {
              if (a[j]>=a[i])
              {
                             if (f[j]+1>f[i]) f[i]=f[j]+1;
                             else f[i]=f[i];
              }
          }
      }
      max=f[0];
      for (i=1;i<n;i++)
      {
          if (f[i]>max)
          max=f[i];
      }
      printf ("%d\n",max);
}
int D(int*h,int i,int n)
{
	int j,z=1,x;
	if(i<n)
	{
		for(j=i+1;j<n+1;j++)
		{
			if(h[j-1]<=h[i-1])
			{
				x=D(h,j,n)+1;
				if(z<x)z=x;
			}
		}
	}
	return z;
}
int main()
{
	int i,n,z=1,h[25],x;
	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%d",h+i);
	for(i=0;i<n;i++)
	{
		x=D(h,i+1,n);
		if(z<x)z=x;
	}
	printf("%d",z);
	return 0;
}
void main()
{
	int n,a[26]={0},i,j,z,l[26]={1};
	scanf("%d",&n);
	for(i=n;i>0;i--)
		scanf("%d",&a[i]);
	for(i=1;i<=n;i++)
	{for(z=j=0;j<i;j++)
		if(a[i]>=a[j]&&z<=l[j])
			z=l[j]+1;
	 l[i]=z;
	}
	for(z=i=0;i<=n;i++)
		if(l[i]>z)
			z=l[i];
	printf("%d\n",z-1);
}
int compare(int x,int y)
{
    if(x<=y)
    x=y+1;
    return x;
}
main()
{
      int i,n,r,a,j;
      scanf("%d",&n);
      int *p=(int *)malloc(n*sizeof(int));
      for(i=0;i<n;i++)
      scanf("%d",&p[i]);
      int *q=(int *)malloc(n*sizeof(int));
      //int q[25];
      for(j=n-1;j>=0;j--)
       {
         q[j]=1;
         for(r=n-1;r!=j;r--)
         {
           if(p[j]>=p[r])
           q[j]=compare(q[j],q[r]);
         }
         //q[j]=q[j]+1;
       }
       int max;
       max=q[0]; 
      for(a=1;a<n;a++)
      {
        if(q[a]>max)
        max=q[a];
      }
      printf("%d",max);
      return 0;
}
main()
{
   int i,j;
   int k;
   scanf("%d",&k);
   int a[k],b[k];
   for(i=0;i<k;i++)
   {
     scanf("%d",&a[i]);
   }
   b[k-1]=1;
   int d;
   for(i=k-2;i>=0;i--)
   { d=0;
     b[i]=1;
     for(j=i+1;j<k;j++)
      {if(a[i]>=a[j])
        if(d<b[j])
         d=b[j];
      }
      b[i]=1+d;
   }
   for(i=0;i<k;i++)
   if(d<b[i])
   d=b[i];
   printf("%d",d);}
int main(int argc, char* argv[])
{
	int k;
	scanf("%d",&k);
	int a[25];
	int i,j,temp=0;
	for(i=0;i<k;i++){
	scanf("%d",&a[i]);
	}
	int max[25];
	for(i=0;i<k;i++){
		max[i]=1;}

	for(i=k-2;i>=0;i--){
		
		for(j=i+1;j<k;j++){
		if(a[i]>=a[j]) temp=max[j]+1;
		if(temp>max[i]) max[i]=temp;
		}

	}
	int nmax=0;
	for(i=0;i<k;i++){
	if(max[i]>nmax) nmax=max[i];}
	printf("%d\n",nmax);

	return 0;
}
int num(int k,int i,int *p,int height){
	if(i==k)return 0;
	if(*(p+i)>height)return(num(k,i+1,p,height));
	if(*(p+i)==height)return(num(k,i+1,p,height)+1);
	int a=num(k,i+1,p,height);
	int b=num(k,i+1,p,*(p+i))+1;
	return a>b?a:b;
}
int main(){
	int k,h[25],i;
	scanf("%d",&k);
	for(i=0;i<k;i++)scanf("%d",&h[i]);
	printf("%d",num(k,0,h,1000000000));
	return 0;
}
main()
{
      int n,a[25],b[25],i,j,max,s;
      scanf("%d",&n); 
      for(i=0;i<n;i++)
      {
                      scanf("%d",&a[i]);
                      b[i]=0;
      }
      

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