semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main()
{
      int n,i,j,t,m,x,k;
      char a[100][100],b[100],c[100],d[100][100],e[100],f[100][100],s[100];
      scanf("%d",&n);
      for(i=0;i<n;i++)
      scanf("%s %d",a[i],&b[i]);
      k=0;
      for(i=0;i<n;i++)
      {
                      if(b[i]>=60)
                      {c[k]=b[i];strcpy(d[k],a[i]);k++;}
                      }
      for(i=0;i<k-1;i++)
      {
                      for(j=0;j<k-1-i;j++)
                      {
                                          if(c[j]<c[j+1]){t=c[j];c[j]=c[j+1];c[j+1]=t;strcpy(s,d[j]);strcpy(d[j],d[j+1]);strcpy(d[j+1],s);}
                                          }
                      }
      for(i=0;i<k;i++)
      printf("%s\n",d[i]);
      m=0;
      for(i=0;i<n;i++)
      {
                      if(b[i]<60){e[m]=b[i];strcpy(f[m],a[i]);m++;}
                        }
      for(i=0;i<m;i++)
      printf("%s\n",f[i]);
      }
void main()
{
	int n;
	int i;
	int j;
	struct client
	{
		char num[11];
		int age;
	};
	struct client line[100];
	struct client temp;

	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%s%d",&line[i].num,&line[i].age);

	for(i=0;i<n-1;i++)
		for(j=0;j<n-1;j++)
		{
			if(line[j].age>=60&&line[j+1].age>=60)
			{
				if(line[j].age<line[j+1].age)
				{
					temp=line[j];
					line[j]=line[j+1];
					line[j+1]=temp;
				}
			}
			if(line[j].age<60 && line[j+1].age>=60)
				{
					temp=line[j];
					line[j]=line[j+1];
					line[j+1]=temp;
				}
		}
	for(i=0;i<n;i++)
		printf("%s\n",line[i].num);

}
struct patient
{
	char id[10];
	int age;
}pat[100],p[100];
void main()
{
	int n,m=0,i,j=0,k,temp,a[40]={0},sum=1;
	scanf("%d\n",&n);
	for(i=0;i<n;i++)
		scanf("%s%d",pat[i].id,&pat[i].age);
	for(i=0;i<n;i++)
	{
		if(pat[i].age>=60)
		{	p[j++]=pat[i];m++;}
	}
	a[0]=p[0].age;
	for(j=1;j<m;j++)
	{	for(i=0;a[i]!=0;i++)
			if(a[i]==p[j].age)break;
			if(a[i]==0)
			{a[i]=p[j].age;sum++;}
	}
	for(j=0;j<sum-1;j++)
	{
		k=j;	
		{
			for(i=j+1;i<sum;i++)
				if(a[i]>a[j])
			{k=i;
			temp=a[k];a[k]=a[j];a[j]=temp;}
		}
	}
	for(k=0;k<sum;k++)
	{	for(j=0;j<m;j++)
		{
			if(p[j].age==a[k])printf("%s\n",p[j].id);
		}
	}	
	for(i=0;i<n;i++)
	{	
		if(pat[i].age<60)
			printf("%s\n",pat[i].id);
	}
}
int main()
{
    int n,i,j,k=0,t=0,y[100],x,a[100]={0},b[100];
    char s[100][20],temp[20],s1[100][20],s2[100][20];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
     scanf("%s %d",s[i],&y[i]);
     }
    for(i=0;i<n;i++)
    {
      if(y[i]>=60)
      {
        strcpy(s1[k],s[i]);
        a[k]=y[i];
        k++;
        }
      }
  //    for(i=0;i<k;i++)
  //    printf("%s %d@@\n",s1[i],a[i]);
    for(i=0;i<k-1;i++)
     for(j=0;j<k-i-1;j++)
     if(a[j]<a[j+1])
     {
        x=a[j];
        a[j]=a[j+1];
        a[j+1]=x;
        strcpy(temp,s1[j]);
        strcpy(s1[j],s1[j+1]);
        strcpy(s1[j+1],temp);
      }
     for(i=0;i<k;i++)
     printf("%s\n",s1[i],a[i]);
       for(i=0;i<n;i++)
    {
      if(y[i]<60)
      {
        strcpy(s2[t],s[i]);
        t++;
        }
      }
     for(i=0;i<t;i++)
     printf("%s\n",s2[i]);
     return 0;
}
struct pa{
	char name[10];
	int age;
	struct pa *next;
};

void sort(struct pa *head,struct pa *s)
{
	struct pa *p1,*p2;
	p1=head->next;
	p2=head;
	while(p1&&p1->age>=s->age)
	{
		p2=p1;
		p1=p1->next;
	}
	p2->next=s;
	s->next=p1;
}

void creat(struct pa *head,struct pa *s)
{
	struct pa *p2,*p1;
	p1=head->next;
	p2=head;
	while(p1)
	{
		p2=p1;
		p1=p1->next;
	}
	p2->next=s;
	s->next=p1;
}

struct pa * input()
{
	int i,n;
	struct pa *s,*head1,*head2,*p1,*p2;
	head1=(struct pa *)malloc(len);
	head2=(struct pa *)malloc(len);
	head1->next=NULL;
	head2->next=NULL;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
        s=(struct pa *)malloc(len);
		scanf("%s%d",s->name,&s->age);
		if(s->age>=60) sort(head1,s);
		else creat(head2,s);
     }
	p1=head1->next;
	p2=head1;
	while(p1)
	{
		p2=p1;
		p1=p1->next;
	}
	p2->next=head2->next;
	return(head1);
}

void print(struct pa *head)
{
	struct pa *p;
	p=head->next;
	while(p)
	{
		printf("%s\n",p->name);
		p=p->next;
	}
}


void main()
{
	struct pa *head;
	head=input();
	print(head);
}
int main()
{
	int n,*a,*d,j,i;
	scanf("%d",&n);
	a=(int*)malloc(sizeof(int)*(n+1));
	for(i=1;i<n+1;i++)
		scanf("%d",&a[i]);
	d=(int*)malloc(sizeof(int)*(n+1));
	for(i=1;i<=n;i++)
		d[i]=1;
	for(i=n-1;i>0;i--)
	{
		
		for(j=i+1;j<=n;j++)
		{
			
			if(a[j]<=a[i])
				if(d[i]<d[j]+1)
					d[i]=d[j]+1;
		}
	}
	int max=d[1];
	for(i=1;i<=n;i++)
		if(max<d[i])
			max=d[i];
	printf("%d\n",max);
	free(a);
	free(d);
	return 0;
}
int n , a[30] , f[30] , ans;

int main()
{
    scanf("%d" , &n);
    for (int i = 1; i <= n; ++i)
        scanf("%d" , &a[i]);
    for (int i = 1; i <= n; ++i) {
        for (int j = 1; j <= i; ++j)
            if (a[j] >= a[i] && f[j] > f[i]) f[i] = f[j];
        f[i]++;
    }
    ans = 0;
    for (int i = 1; i <= n; ++i)
        if (f[i] > ans) ans = f[i];
    printf("%d\n" , ans);
}
main()
{
int max,i,j,k,n,m,a[100],f[100];
scanf("%d",&n);
for (i=1;i<=n;i++)
scanf("%d",&a[i]);
f[n]=1;
max=1;
for (i=n-1;i>=1;i--)
{
k=0;
for (j=i+1;j<=n;j++)
{
if (a[j]<=a[i]) k=(f[j]>k)?f[j]:k;
}
k++;
f[i]=k;
max=(max>f[i])?max:f[i];
}
printf("%d",max);
}
int main()
{
	int k,i,j,t,d[25],h[25];//h?????????d????????????????????????
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{scanf("%d",&h[i]);}
	for(i=0;i<k;i++)  //?i=0??
	{
		t=0;
		for(j=0;j<i;j++)//???i?????????????????????+1
		{
			if(h[j]>=h[i])//?????????????????????????t?????
			{
				if(d[j]>t) t=d[j];
			}
		}
		d[i]=t+1;//????i?????1
	}
	for(i=0;i<k;i++)
	{
		if(d[i]>t) t=d[i];//????????
	}
	printf("%d\n",t);
	return 0;
}
int main()
{
	int *p,*num;
	int n,add;
	
	scanf ("%d",&n);
	p=(int*)malloc(sizeof (int)*n);
	num=(int*)malloc(sizeof (int)*n);


	for (int i=0;i<=n-1;i++)
	{
		scanf ("%d",p+i);
		*(num+i)=1;
	}

	for (int i=n-2;i>=0;i--)
	{
		add=0;
		for (int k=i+1;k<=n-1;k++)
		{
			if (*(p+i)>=*(p+k)&&*(num+k)>add)
				add=*(num+k);
			//printf ("%d",*(num+k));
			//printf ("%d",add);
		}
		*(num+i)+=add;
	}
	int maxnum=0;
	for (int i=0;i<=n-1;i++)
	{
		if (*(num+i)>maxnum)
			maxnum=*(num+i);
		//printf ("%d",*(num+i));
	}
	printf ("%d",maxnum);
	
	return 0;
}
int main() 
{ 
	int height[50],flag[50],max,i,j; 
	int num ; 

	scanf("%d",&num); 

	for (i = 0; i < num; i ++) 
	{ 
		scanf("%d",&height[i]); 
		flag[i] = 1; 
	} 
	for (i = 0; i < num; i ++) 
	{ 
		for (j = 0; j < i; j ++) 
		{ 
			if (height[j] >= height[i]) 
			{ 
				if (flag[j] + 1 > flag[i])
					flag[i] = flag[j] + 1; 
			} 
		} 
	} 
	
	max = flag[0]; 
	for (i = 1; i < num; i ++) 
	{ 
		if (flag[i] > max) 
			max = flag[i]; 
	} 
	printf("%d\n",max); 
	return 0; 
}
void main()
{
    int n,a[28],b[28][28]={0},i,j,l,t,z=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    scanf("%d",&a[i]);
    for(l=1;l<=n;l++)
    {
    	b[l][l]=1;
        for(i=l;i<=n;i++)
        {
        	z=0;
    	    for(j=i-1;j>l-1;j--)
    	    if(a[j]>=a[i]&&b[l][j]>=b[l][i])
    	    {b[l][i]=b[l][j]+1;z=1;}
    	    if(z==0)
    	    b[l][i]=1;
    	}
    }
    t=b[1][1];
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
    {
    	    	if(b[i][j]>t)t=b[i][j];
    }
    printf("%d",t);
}
main()
{
    int n,i,j,t;
    scanf("%d",&n);
    int *p=(int*)malloc(n*sizeof(int));
    int *f=(int*)malloc(n*sizeof(int));
    for(i=0;i<n;i++)
        scanf("%d",&p[i]);
    for(i=0;i<n;i++)
        f[i]=0;
    for(i=0;i<n;i++)
    {
        t=0;
        for(j=0;j<=i;j++)
        {
            if(p[i]<=p[j]&&t<=f[j])
                t=f[j];
        }
        f[i]=t+1;
    }
    for(i=0,t=1;i<n;i++)
    {
        if(t<f[i])
            t=f[i];
    }
    printf("%d\n",t);
    }
int h[25],n; 
int main() 
{  
int max(int a,int b);
int k,i;
scanf("%d",&n);
for(i=0;i<n;i++) scanf("%d",&h[i]);
k=max(50000,0);
printf("%d",k);
return 0;
} 
int max(int hmax,int b)
{
int x,y,z;
while(h[b]>hmax) b=b+1;
if(b==n)return 0;
x=max(hmax,b+1);
hmax=h[b];
y=1+max(hmax,b+1);
z=x>y?x:y;
return z;
}
int daodan[30];
int res[30];
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cin>>daodan[i];
		res[i]=1;
	}
	for(int i=n-1;i>=0;i--)
	{
		for(int j=n-1;j>i;j--)
		{
             if(daodan[i]>=daodan[j])
				 res[i]=max(res[i],res[j]+1);
		}
	}
	for(int i=0;i<n;i++)
	{
		if(res[i]>res[0])
		res[0]=res[i];
	
	}
	cout<<res[0]<<endl;
	return 0;
}
int main()
{
	int k;
	cin>>k;
	int high[30];
	int num[30]={0};
	int i,j;	
	for(i=0;i<k;i++)
	{
		cin>>high[i];		
	}
	num[0]=1;
	for(i=1;i<k;i++)
	{
		int max=0;
		for(j=i-1;j>=0;j--)
		{
			if(high[i]<=high[j])
			{
				if(max<num[j])
					max=num[j];
			}
		}
		num[i]=max+1;
	}	
	sort(num,num+k);
	printf("%d",num[k-1]);
	return 0;
}
int k[25],n;
int f(int max,int i,int sum)
{
	int p,q=0;
	if(i==n)return sum;
	else
	{
		p=f(max,i+1,sum);
		if(max>=k[i])q=f(k[i],i+1,sum+1);
		return p>q?p:q;
	}
}
void main()
{
	int i;scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%d",&k[i]);
	printf("%d",f(2147483647,0,0));
}
int main()
{
	int f(int x,int y,int b[]);
	int i,k,a[30],max;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	for(i=0,max=0;i<k;i++)
	{
		if(f(i,k,a)>=max)
			max=f(i,k,a);
	}
	printf("%d\n",max);
	return 0;
}
int f(int x,int y,int b[])
{
	int z,i,p,m;
	for(i=x+1,p=0;i<y;i++)
	{
		if(b[i]<=b[x])         //only compare with b[x]
			p++;
	}
	if(p==0)
	{
		z=1;
	}
	else 
	{
		for(i=x+1,m=0;i<y;i++)
		{
			if(b[i]<=b[x])
			{
				if(m<=f(i,y,b))
					m=f(i,y,b);      // after m there are f nums<b[i]
			}
		}
		z=m+1;
	}
	return z;
}
void main()
{
	int m,a[25],b[25],i,j,t,s=0;
    scanf("%d",&m);
	for(i=0;i<m;i++)
	{
		scanf("%d",&a[i]);
	    for(j=0,t=0;j<i;j++)
		{
			if(a[j]>=a[i])
			{
				if(b[j]>t)t=b[j];
			}
		}
	    b[i]=1+t;
        if(b[i]>s)s=b[i];
	}
	printf("%d",s);
}
int max(int* data,int lens)
{
    int r=*data;
    for(int j=0;j<lens;j++)if(*(data+j)>r)r=*(data+j);
    return r;
}
int f(int* data,int lens,int height)
{
    int tempResult[25];
    if(lens==0)return 0;
    int count=0,tempHeight=0;
    for(int i=0;i<lens;i++)
    {
                       if(data[i]<=height && data[i]>=tempHeight)
                       {tempHeight=data[i];tempResult[count]=f(data+i+1,lens-i-1,data[i]);count++;}
                       
    }
    if(count==0)return 0;
    return max(tempResult,count)+1;
}                   
                       

int main()
{
    int data[25];
    int n;
    cin>>n;
    for(int i=0;i<n;i++)cin>>data[i];
    cout<<f(data,n,max(data,n));
   
                 return 0;
}
int main()
{
	int i,j,k,x[30],f[30],temp,max;
	cin >> k;
	for (i=0;i<k;i++)
		cin >> x[i];
	f[0]=1;
	for(i=1;i<k;i++)
	{
		max=1;
		for(j=0;j<i;j++)
		{
			temp =0;
			if(x[i]<=x[j])
				temp = f[j]+1;
			if(temp > max)
				max=temp;
		}
		f[i]=max;
	}
	max=1;
	for(i=0;i<k;i++)
	{
		if(f[i]>max)
			max=f[i];
	}
	cout << max << endl;
	return 0;
}
int main()
{
	int k,i,j,p,h[100]={0},m[100],max=1;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&h[i]);
	}
	for(i=0;i<100;i++)
	{
		m[i]=1;
	}
	
	for(i=k-2;i>=0;i--)
	{
		for(j=i+1;j<k;j++)
		{
			if((h[j]<=h[i])&&(m[j]+1>=m[i]))
			{
				m[i]=m[j]+1;
			}
		}
	}
	for(p=k-1;p>=0;p--)
	{
		if(m[p]>=max)   
		{max=m[p];}
	}
	printf("%d",max);
	return 0;
}
struct missle
{
	int id;
	int h;
}*p,tmp;
int max = 0;

int maxn(int i ,int n);
int pass (int pre,int aft);

int main()
{
	int k;
	scanf("%d",&k);
	p = (struct missle * ) malloc ( sizeof ( struct missle ) * k );
	int i = 0;
	do
	{
		scanf("%d",&p[i].h);
		p[i].id = i;
		i++;
	}while ( i < k );
	int j;
	for ( i = 0 ; i < k ; i++ )
	{
		j = maxn(i,k);
	}

	printf("%d\n",max);
	free(p);

	return 0;
}



int maxn ( int i , int n )
{
	int max2 = 1;
	int re=1;
	int j;
	if ( i == n - 1 )
	{
		max2 = 1;
	}
	else
	{
		for ( j = i + 1 ; j < n ; j++ )
		{
			re = 1;
			if ( pass ( i , j ) == 1 )
			{
				re +=  maxn(j,n);
				if ( re > max2 )
				{
					max2 = re;
				}
			}
		}
	}
	if ( max2 > max )
	{
		max = max2;
		//printf("%d\n",i);
	}
	return max2;
}


int pass (int pre,int aft)
{
	if (p[pre].h >= p[aft].h)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
int H[1000],D[1000];

int main()
{
 int i,j,k,n,temp;
 for(i=0;i<21;i++) D[i]=0;
 i=0;
 while(scanf("%d",&H[i])!=EOF)     i++;
 D[i-1]=1;
 for(j=i-2;j>=0;j--)
 {
   k=j+1;
   n=0;
   while(k<i)
   {
     if(H[j]>=H[k]&&D[k]>n) n=D[k];
     k++;
   }
  D[j]=n+1;
 }
 n=0;
 for(j=0;j<i;j++)
 {
  if(D[j]>n) n=D[j];
 }
 printf("%d",n);
 
}
main()
{
	int a[25],b[25],k,i,j,m=0;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",a+i);
	for(i=0;i<k;i++)
	{
		b[i]=1;
		for(j=0;j<i;j++)
			if(a[j]>=a[i]&&b[j]+1>b[i]) b[i]=b[j]+1;
		if(b[i]>m) m=b[i];
	}
	printf("%d",m);
}
int main()
{
	int k,a[26],r[26];
	cin >> k;
	for(int i = 0;i<26;i++)
		a[i] = 0;
	for(int i = 0;i<26;i++)
		r[i] = 1;
	for(int i = 0;i<k;i++)
		cin >> a[i];

	for(int i= 0;i<k;i++)
	{
		if(i == 0)
			r[i] = 1;
		else
		{
			for(int j = 0; j < i;j++)
			{
				if(a[j] >=a[i] && r[j] >= r[i])
				{
					r[i] = r[j]+1;
				}
			}
		}
	}
	int s = 0;
	for(int i = 0; i<k;i++)
	{
		if(r[i]>s)
			s=r[i];
	}
	cout << s << endl;
	
	return 0;
}
main ()
{
	int n,i,j,a[30],b[30],max=1;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i-1]);
	}
	for(i=1;i<=n;i++)
	{
		b[i-1]=1;
	}
	for(i=2;i<=n;i++)
	{
		for(j=1;j<=i-1;j++)
		{
			if(a[n-i]>=a[n-i+j]&&b[n-i]<=b[n-i+j])
			{
				b[n-i]=1+b[n-i+j];
			}
		}
	}
	
	for(i=1;i<=n;i++)
	{
		if(b[i-1]>max)
		max=b[i-1];
	}
	printf("%d",max);
}
int rec[26];
int k,sum,i,j;
int n[26];
int max(int a,int b)
{
    if (a>b) return(a);
    else return(b);
}
main()
{
    scanf("%d",&k);
    for(i=1;i<=k;i++) scanf("%d",&rec[i]);
    for(i=1;i<=k;i++) n[i]=1;
    for (i=2;i<=k;i++)
        for(j=1;j<i;j++) if (rec[i]<=rec[j]) n[i]=max(n[i],n[j]+1);
    sum=0;
    for(i=1;i<=k;i++) sum=max(sum,n[i]);
    printf("%d",sum);
}
int main()
{
    int i,j,k,n,t,flag=0;
    int a[30],b[30];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    for(i=n-1;i>=0;i--)
    {
    b[i]=1;
    for(j=n-1;j>=i;j--)
       {
        if(a[i]>=a[j])
        {flag=1;
        if(b[i]<b[j])
        b[i]=b[j];}          
       } 
    b[i]=b[i]+1;
    if(flag==0)
   {b[i]=1;}               
    }
    for(i=0;i<n;i++)
    {if(b[0]<b[i])
    b[0]=b[i];}
    printf("%d",b[0]-1);
}
void main()
{
	int n,i,j,a[100]={0},b[100]={0},sum=0;

    scanf("%d",&n);

    for (i=1;i<=n;i++)

    scanf("%d",&a[i]);

    for (i=1;i<=n;i++)
	{
		b[i]=1;

    for (j=1;j<i;j++)

    if(a[j]>=a[i]&&b[j]+1>b[i])

     b[i]=b[j]+1;

    if (sum<b[i]) sum=b[i];
	
	}

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

}
main()
{
	int n;
	scanf("%d",&n);
	int a[26],f[26];
	for (int i=0;i<=n-1;i++)
		scanf ("%d",&a[i]);
	f[0]=1;
	if(a[1]<=a[0])
	f[1]=2; 
	else
	f[1]=1;
	for (int i=2;i <=n-1;i++)
		{
			int c[26]; 
			for (int q=0;q <=i-1;q++)
			{
				if (a[q]>=a[i])
				c[q]=f[q];
				else 
				c[q]=0;
			}
			int maxc=c[0];
			for (int j=1;j<=i-1;j++)
			{
				if (maxc<c[j])
				maxc=c[j] ;
			}
			f[i]=maxc+1; 
		} 
	int max=f[0];
	for (int m =1;m <=n-1; m++)
		{
			if (f[m]>max)
			max=f[m];
		}
	printf ("%d",max);
}
int main()
{
    int missile[25],k;
    int max[25],max1;
    int i,j;
    scanf("%d",&k);
    max[k-1]=1;
    for(i=0;i<k;i++)
        scanf("%d",&missile[i]);
    for(i=k-2;i>=0;i--)
       {
        max[i]=1;
        for(j=i+1;j<k;j++)
            if(missile[i]>=missile[j]&&max[i]<=max[j])
               max[i]=max[j]+1;
       }
    for(i=0,max1=0;i<k;i++)
        if(max[i]>max1)
           max1=max[i];
    printf("%d",max1);
    return 1;  
}
main()
{
	int n,i,j,max,m,k;
	scanf("%d",&n);
	static int hight[25],num[25];
	for(i=0;i<=n-1;i++)  scanf("%d",&hight[i]);
    num[0]=1;
	for(i=1;i<=n-1;i++)
	{
		for(j=i-1;j>=0;j--)
		{
			m=0;
			if(hight[j]>=hight[i])
			{
				m=num[j];
				break;
			}
		}
        if(j==-1) num[i]=1;
		for(k=j-1;k>=0;k--)
		{
			if(hight[k]>=hight[i])
			{
				if(num[k]>m) m=num[k];
			}
		}
		if(num[i]==0) num[i]=m+1;
	}
	max=num[n-1];
	for(i=n-2;i>=0;i--)
	{
		if(num[i]>max) max=num[i];
	}
	printf("%d\n",max);
	return 0;
}
int main()
{
	int N;
	int a[30]={0},f[30]={0};
	cin >> N;
	for (int i=0; i< N ; i++)
	{
		cin >> a[i];
		f[i]=1;
	}
	int ans = 0;
	for (int i=1; i<N;i++)
	{
		int mx=0;
		for (int j=0;j<i;j++)
			if (a[j]>=a[i] && f[j]>mx)
				mx = f[j];
		f[i]= mx+1;
		if (ans < f[i]) ans = f[i];
	}
	cout << ans << endl;
	return 0;
}
int a[25],b[25];
int n;
int changdu(int i)
{
    int j,max=1;
    for(j=i+1;j<n;j++)
    {
                      if(a[i]>=a[j])
                      {
                                    b[i]=changdu(j)+1;
                                    if(b[i]>max)
                                    max=b[i];
                                    }
                                    }
    b[i]=max;
    return max;

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

      }
main()
{
	int k,a[25],i,j,l,p,q;
	int b[25]={0};
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&a[i]);
	}
	for(j=k-1;j>=0;j--)
	{
		for(l=k-1;l>=j;l--)
		{
			if(l!=j)
			{
			if((a[j]>=a[l])&&(b[j]==b[l]-1))
			{
				b[j]=b[l];
			}
			}
			else if(l==j) 
			{
			   b[j]=b[j]+1;
		    }
		} 	
	}
	for(p=1;p<=k-1;p++)
			{
				if(b[0]<b[p])
				{
				    q=b[0];
					b[0]=b[p];
					b[p]=q;
				}
			}
	printf("%d",b[0]);
}
int main()
{
	int a[30],b[30],n,i,j,max,ans=0;
	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-1;i>=0;i--)
	{
		max=0;
		for(j=n-1;j>i;j--)
		{
			if(a[i]>=a[j])
			{
				if(b[j]>max){max=b[j];}
			}
			if(a[i]>=a[j]&&b[j]==max)
			{
				b[i]=b[j]+1;
			}
		}
		if(b[j]>ans)ans=b[j];
	}

	printf("%d",ans);
	return 0;
}
typedef struct
{
	int file;
	int reign;
}missile;
void main()
{
	int n,i,j,max=0;
	missile a[30];
	scanf("%d",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i].file);
	}
	a[n].reign=1;
	for(i=n-1;i>=1;i--)
	{
		a[i].reign=1;
		for(j=i+1;j<=n;j++)
		{
			if(a[j].file<=a[i].file)
			{
				if(a[j].reign+1>a[i].reign)
				{
					a[i].reign=a[j].reign+1;
				}
			}
		}
	}
	for(i=1;i<=n;i++)
	{
		if(a[i].reign>max)
		{
			max=a[i].reign;
		}
	}
	printf("%d",max);
}
// ???len[i]??a[i]??????????
// ??????: len[i] = max{h[j]},0 <= j < i,
// h[j] = len[j]+1, ??a[i] > a[j]
// h[j] = 1, ??a[i] <= a[j]
int main()
{
    int a[M], len[M], n, i, j, max, longest;
    
    scanf("%d", &n);
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
    }

    longest = 1;
    for (i = 0; i < n; i++) 
        {
        max = 1;
        len[i] = 1;
        for (j = 0; j < i; j++) 
            {
            if (a[i] <= a[j])
                max = len[j] + 1;
            if (len[i] < max)
                len[i] = max; 
            } 
        if (len[i] > longest)
            longest = len[i];
        }
    printf("%d\n", longest);

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

}
int a[26];
int main()
{
    int d(int xz,int p,int q);
    int y,i,n;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
      scanf("%d",&a[i]);
    }
    y=d(10000,1,n);
    printf("%d",y);    
}
int d(int xz,int p,int q)
{
    int g,h;
    if (p==q&&a[p]<=xz) return 1;
    else if(p==q&&a[p]>xz) return 0;
    else 
    {
         if(xz<a[p]) return(d(xz,p+1,q));
         else
         {
         g=1+d(a[p],p+1,q);
         h=d(xz,p+1,q);
         if(g>h) return(g);
         else return(h); 
         }         
    }
}
void main()
{
  int n;
  int arr[103],brr[103];
  int i,j,k,max;
  scanf("%d\n",&n);
  for (i=1;i<=n;i++) scanf("%d",&arr[i]);
  for (i=1;i<=n;i++) brr[i]=0;
  max=0;
  for (i=n;i>=1;i--) 
  {
    k=0;
    for (j=n;j>i;j--)
    {if ((arr[j]<=arr[i])&&(brr[j]>k)) k=brr[j];}
    brr[i]=k+1;
    if (brr[i]>max) max=brr[i];
  }
  printf("%d\n",max);
}
int k,height[25];
int route(int m)
{
	int i,a=0,max=0;
	for(i=m+1;i<k;i++)
		if(height[i]<=height[m])
			a+=1;
	if(a==0)
	    return 1;
	else
	{
		for(i=m+1;i<k;i++)
			if(height[i]<=height[m]&&route(i)>max)
				max=route(i);
		return (max+1);
	}
}
int main()
{
	int i,ans[25],a=0;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&height[i]);
	for(i=0;i<k;i++)
		ans[i]=route(i);
	for(i=0;i<k;i++)
		if(ans[i]>a)
			a=ans[i];
	printf("%d\n",a);
}
// itc online practice nov 13 prob 6
int k; 
int height[26];
int len(int num) {
    int temp,max,i; 
    if (num==k) {
                return(1);
    } else {
            max=0; 
            for (i=num+1;i<=k;i++) {
                if (height[num]>=height[i]) {
                                            temp=len(i);
                                            if (max<temp) {
                                                          max=temp;
                                            }
                }
            }
    }
    return(max+1);
} 
main() {
       height[0]=30001; 
       scanf("%d",&k);
       int i;
       for (i=1;i<=k;i++) {
           scanf("%d",&height[i]);
       }
       printf("%d",len(0)-1);
       scanf("%d",&k);
}
int n;
static int c[25];
int max(int a,int b)
{
	if(a>=b)
	return (a);
	else return (b);
}
int f(int mx,int st)
{
	for(;st<n;st++)
	if(c[st]<=mx)
	return (max(f(c[st],st+1)+1,f(mx,st+1)));
	return  0;
}
int main()
{
	int i,s;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d",&c[i]);
	s=f(4000,0);
	printf("%d",s);
}
main()
{
     int n;
     scanf("%d",&n);
     int *p=(int*)malloc(n*sizeof(int));
     int *q=(int*)malloc(n*sizeof(int));      
     q[n-1]=1;
     int best=q[n-1];
     for(int i=0;i<n;i++) scanf("%d",&p[i]);
     for(int i=n-2;i>=0;i--)
     {
          int a=0;    
          for(int k=n-1;k>i;k--)
          {
               if (p[i]>=p[k]&&q[k]>=a) a=q[k];
          }
          q[i]=a+1;
          if(q[i]>best) best=q[i];
     }
     printf("%d\n",best);
}
int main()
{
    int a[A],i,j,n,b[A],max=0;
	scanf("%d",&n);
	for(i=n-1;i>=0;i--)
	{
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{
	    b[i]=1;
        for(j=i-1;j>=0;j--)
		{
			if(a[i]>=a[j]&&b[i]<b[j]+1)
			{
                 b[i]=b[j]+1;
			} 
		}
	}
	for(i=0;i<n;i++)
	{
		if(max<b[i]) max=b[i];
	}
	printf("%d",max);
	return 0;
}
int bomb[25],p=0,k,antibomb[25],j=0,answer[2]={0,0};
void makeanti(int a[]);
void main()
{
	int i;
	scanf("%d",&k);
	for(i=0;i<k;i++) scanf("%d",&bomb[i]);
	makeanti(bomb);
	printf("%d",answer[0]);
	getchar();
	getchar();
}
void makeanti(int bomb[])
{
	int i,l,r=0,aa;
	if(k==0)
	{
		answer[1]=j;
		answer[0]=answer[0]>answer[1]?answer[0]:answer[1];
	}
	else
		for(i=0;i<k;i++)
		{
			if(j==0) antibomb[j++]=bomb[i];
			else if(bomb[i]<=antibomb[j-1]) 
			{
				antibomb[j++]=bomb[i];
				r=1;
			}
			else if(r==0&&i==k-1)
			{
				answer[1]=j;
			 answer[0]=answer[0]>answer[1]?answer[0]:answer[1];
				continue;
			}
			else continue;
			k-=(i+1);
			for(l=0;l<=i;l++) bomb++;
			makeanti(bomb);
			j--;
			k+=(i+1);
			for(l=0;l<=i;l++) bomb--;
		}
}
main()
{
	int i,j,k,n,height=9999;
	scanf("%d",&n);
	int*a=(int*)malloc(n*sizeof(int));
	int**b=(int**)malloc(n*sizeof(int*));
	for(i=0;i<=n-1;i++)
	b[i]=(int*)malloc(9999*sizeof(int));
	for(i=0;i<=n-1;i++)
	scanf("%d",&a[i]);
	for(i=0;i<=n-2;i++)
	{
		if(a[i]>a[i+1])
		{
			k=a[i];
			a[i]=a[i+1];
			a[i+1]=k;
		}
	}
	height=a[n-1];
	for(i=n-1;i>=0;i--)
	{
		for(j=0;j<=height;j++)
		{
			if(i==n-1)
			{
				if(j>=a[i])
				{
				b[i][j]=1;
				}
				else
				b[i][j]=0;
			}
			else
			{
			if(j>=a[i])
			{
				if(1+b[i+1][a[i]]>b[i+1][j])
				{
					b[i][j]=1+b[i+1][a[i]];
				}
				else
				b[i][j]=b[i+1][j];
			}
			else
			b[i][j]=b[i+1][j];
			}
		}
	}
	printf("%d",b[0][height]+1);
}
int main()
{
	int k,i,j,a[25]={0},f[25]={1},t=0;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	scanf("%d",&a[i]); 
	for(i=0;i<k;i++)
	for(j=0;j<i;j++)
	if(a[j]>=a[i]&&f[j]>=f[i])f[i]=f[j]+1;
	else if(f[i]==0)f[i]=1;
	for(i=0;i<k;i++)
	if(t<f[i])t=f[i];
	printf("\n%d",t);
	return 0;	
    }