semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int max(int x,int y)
{
	int z;
	if(x>=y)
		z=x;
	else
		z=y;
	return (z);
}

int MAX_multi(int str[25],int n)
{
	int t=0,i;
	for(i=0;i<n;i++)
	{
		t=max(t,str[i]);
	}
	return (t);
}

void count(int str[25],int num[25],int n)
{
	int i,j;
	for(i=n-1;i>=0;i--)
	{
		for(j=n-1;j>i;j--)
		{
			if(str[i]>=str[j])
				num[i]=max(num[i],num[j]+1);
		}
	}
	printf("%d\n",MAX_multi(num,n));
}

void main()
{
	int n,i,str[25],num[25]={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",&str[i]);
	count(str,num,n);
}
int n, ans;
int f[1000];
int a[1000];
int main(){
    cin >> n;
    for (int i = 0; i < n; i++) cin >> a[i];
    for (int i = 0; i < n; i++){
        f[i] = 1;
        for (int j = 0; j < i; j++){
            if (a[j] >= a[i] && f[j]+1 > f[i])
               f[i] = f[j]+1;               
        }
        ans = ans > f[i]?ans:f[i];
    }
    cout << ans << endl;
    
}
int main()
{
	int a[25],k,b[25];
	cin>>k;
	int max1;
//	int dex;
	for(int i=0;i<k;i++)
	{
		cin>>a[i];
		b[i]=1;
	}
	for(int j=k-1;j>=0;j--)
	{
		max1=0;
		for(int m=k-1;m>j;m--)
		{
			if(a[m]<=a[j]&&b[m]>=max1)
				max1=b[m];
		}
		b[j]=max1+1;
	}
	int max;
	max=b[0];
	for(int n=1;n<k;n++)
	{
		if(max<b[n])
			max=b[n];
	}
	cout<<max<<endl;
	

	return 0;
}
int a[25];
int f(int x)
{
    int t=1,max=1;
    if(a[x+1]==0)
    max=1;
    else
    {
        for(int i=x+1;a[i]!=0;i++)
        if(a[x]>=a[i])
        {
                       t=f(i)+1;
                       if(t>max) max=t;
        } 
     }
    return max;
}
main()
{
      int n,t,max,i,M;
      scanf("%d",&n);
      memset(a,0,25*sizeof(int));
      for(i=0;i<n;i++)
      {
                      scanf("%d",&a[i]);
      }
      M=f(n-1);
      for(i=n-2;i>=0;i--)
      {
                        f(i); 
                        if(M<f(i))
                        M=f(i);
      }
      printf("%d",M);
      getchar();
      getchar();
}
int search(int a[],int b,int c);
int main()
{
int n,s=1,t,k;
int *p,*a,*b;
scanf("%d",&n);
p=(int*)malloc(n*sizeof(int));
a=(int*)malloc(n*sizeof(int));
b=(int*)malloc(n*sizeof(int));
for(int i=0;i<n;i++) scanf("%d",p+i);
for(int i=0;i<n;i++) a[i]=-1;
a[1]=p[0];
for(int i=0;i<n;i++)
{
t=0;
k=search(a,s,p[i]);
if(k>s) s++;
a[k]=p[i];
}
printf("%d\n",s);
return 0;
}
int search(int a[],int s,int m)
{
int low = 1;
int high = s;
int mid;

while (low < high) {
mid = (low + high) / 2;
if (a[mid] == m )
return mid+1;
if (a[mid] > m)
low = mid + 1;
else
high = mid;
}
if (a[low] <= m)
return low;
else
return low+1;
}
int main()
{
    int n;
    int a[100];
    int h[100];
    int ans;
    while (scanf("%d", &n) != EOF)
    {
          ans = 1;
          for (int i = 0; i < n; i ++)
          {
              scanf("%d", &a[i]);
              h[i] = 1;
          }
          for (int i = 1; i < n; i ++)
          {
              int sum = 1;
              for (int j = 0; j < i; j ++)
              {
                  if (a[j] >= a[i] && h[i] < h[j] + 1)
                     h[i] = h[j] + 1;
              }
              if (h[i] > ans) ans = h[i];
          }
          printf("%d\n", ans);
    }
    return 0;
}
void main()
{
    int a[50]={0},flag[50],max,i,j;
    int num;
    scanf("%d",&num);
    for (i=0;i<num;i++)
    {
        scanf("%d",&a[i]);
        flag[i]=1;
    }
    for (i=0;i<num;i++)
    {
        for(j=0;j<i;j ++)
        {
            if(a[j]>=a[i])
            {
                flag[i]=flag[j]+1>flag[i]?flag[j]+1:flag[i];
            }
        }
    }
    max = flag[0];
    for (i=1;i<num;i++)
    {
        if (flag[i]>max)
        max=flag[i];
    }
    printf("%d\n",max);
}
int main()
{
	int n;
	scanf("%d",&n);
	int a[n],b[n];
	int i,j;
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=1;
	}
	int m=0;
	for(i=0;i<n;i++)
	{
		for(j=0;j<i;j++)
		{
			if((a[j]>=a[i])&&(b[j]>=b[i]))
			b[i]=b[j]+1;
		}
		if(b[i]>m)m=b[i];
	}
	printf("%d",m);
}
main()
{
      int a[30],b[30],n,i,j,c,d;
      scanf("%d",&n);
      for(i=0;i<30;i++)
      b[i]=1;
      for(i=0;i<n;i++)
      {
                      scanf("%d",&a[i]);
      }
      for(i=n-2;i>=0;i--)
      {
                         d=0;
                         for(j=i+1;j<n;j++)
                         if(a[i]>=a[j])
                         if(b[j]>d)
                         d=b[j];
                         b[i]=b[i]+d;
      }
      c=b[0];
      for(i=1;i<n;i++)
      if(b[i]>c)
               c=b[i];
      printf("%d",c);
      getchar();
      getchar();
}
int H[1000],D[1000];
void sort(int i)
{int j,k,m,n;
 for(j=0;j<=i;j++)
    {m=j;
     for(k=j;k<=i;k++)
     if(D[m]>D[k]) m=k;
     if(m!=j)
     { n=D[j];
       D[j]=D[m];
       D[m]=n;
     }
    }
}

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);
 
}
int main()
{
	int height[27];
	int result[27];
	int k;
	int i , j;
	int nmax;
	cin>>k;
	for(i = 1; i <= k; i++){
		cin>>height[i];
	}
	height[k+1] = 0;
	result[k+1] = 0;
	for(i = k; i > 0; i--){
		nmax = 0;
		for(j = i+1; j <= k+1; j++){
			if(height[i] >= height[j]){
				if(result[j] > nmax){
					nmax = result[j];
				}
			}
		}
		result[i] = nmax + 1;
	}
	nmax = 0;
	for(i = 1; i < k; i++){
		if(result[i] > nmax){
			nmax = result[i];
		}
	}
	cout<<nmax<<endl;
	return 0;
}
int main()
{
	int n,c,i,j;
	int a[100],b[100];
	char ch;
	scanf("%d",&n);
	ch=getchar();
	for(i=0;i<=n-1;i++)
	{
		scanf("%d",&a[i]);
		b[i]=0;
		ch=getchar();
	}
	for(i=n-1;i>=0;i--)
	{
		b[i]=0;
		for(j=i;j<=n-1;j++)
		{
			if(b[j]>b[i]&&a[j]<=a[i])b[i]=b[j];
		}
		b[i]=b[i]+1;
	}
	c=0;
	for(i=0;i<=n-1;i++)
	{
		if(b[i]>c)c=b[i];
	}
	printf("%d",c);
	return(0);
}
void main()
{
	int k,i,j,l=0;
	int a[25]={0},b[25]={0};
	scanf("%d",&k);
	for(i=0;i<=k-1;i++)
		scanf("%d",&a[i]);
	b[k-1]=1;
	for(i=k-2;i>=0;i--)
	{
		for(j=i+1;j<=k-1;j++)
			if(a[i]>=a[j]&&b[i]<=b[j])
				b[i]=b[j]+1;
			if(b[i]==0)
				b[i]=1;
	}
	for(i=0;i<=k-2;i++)
		for(j=0;j<=k-2-i;j++)
			if(b[j]>b[j+1])
			{
				l=b[j+1];
				b[j+1]=b[j];
				b[j]=l;
			}
	printf("%d\n",b[k-1]);
}
void main()
{
    int a[50]={0},flag[50],max,i,j,count=1,st=0;
    int num;
    scanf("%d",&num);
    for (i=0;i<num;i++)
    {
        scanf("%d",&a[i]);
        flag[i]=1;
    }
    for (i=0;i<num;i++)
    {
        for(j=0;j<i;j ++)
        {
            if(a[j]>=a[i])
            {
                flag[i]=flag[j]+1>flag[i]?flag[j]+1:flag[i];
            }
        }
    }
    max = flag[0];
    for (i=1;i<num;i++)
    {
        if (flag[i]>max)
        max=flag[i];
    }
    printf("%d\n",max);
}
int k;
int arr[30];
int num[30];

int main()
{
    cin>>k;
    for(int i=0;i<k;i++)
        cin>>arr[i];
    for(int i=0;i<k;i++)
        num[i]=1;
    for(int i=0;i<k;i++)
    {
        for(int j=0;j<i;j++)
        {
            if(arr[j]>=arr[i]&&num[j]>=num[i])
                num[i]=num[j]+1;
        }
    }
    int res=-1;
    for(int i=0;i<k;i++)
        if(num[i]>res)
            res=num[i];
    cout<<res<<endl;
    return 0;
}
int main()
{
int num=0,k=0,n,i,j,a[50],max=0,f[50]={0};
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=1;i<=n;i++)
{ 
for(j=1;j<=i;j++)
{
if(a[i]<=a[j]&&f[i]<f[j]) 
{
f[i]=f[j];
}
}
f[i]++;
if(max<f[i]) 
{
max=f[i];
}
}
printf("%d",max);
return 0;
}
void main()
{
	int n,i,j,m=0;
	int a[25],b[25]={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",&a[i]);
	b[n-1]=1;
	for(i=n-2;i>=0;i--)
	{
		for(j=i+1;j<n;j++)
		{
			if((a[i]>=a[j])&&(b[i]<=b[j])) b[i]=b[j]+1;
		}
	}
	for(i=0;i<n;i++)
	{
		if(b[i]>=m) m=b[i];
	}
	printf("%d\n",m);
}
void main()
{
	int high[25],i,j,x[25][2],n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&high[i]);
	for(i=0;i<n;i++)
	x[i][0]=1;
	for(i=0;i<n;i++)
	x[i][1]=0;
	for(i=1;i<n;i++)
	{
		for(j=0;j<i;j++)
		{
			if((high[j]>=high[i])&&(x[j][0]>=x[i][0]))
					x[i][0]=x[j][0]+1;
			if(x[j][1]>x[i][1])
				x[i][1]=x[j][1];
			if(x[j][0]>x[i][1])
				x[i][1]=x[j][0];
		}
	}
	i--;
	if(x[i][0]<x[i][1])
		x[i][0]=x[i][1];
	printf("%d",x[i][0]);
}
int main()
{
    int n;
    int s[60];
    cin>>n;
    int key=1;
    for(int i=0;i<n;i++)  
    {       
       cin>>s[i];
       s[i+30]=1;
       for(int j=i-1;j>=0;j--)
       {
               if(s[j]>=s[i])
               {
                       if(s[j+30]>=s[i+30]) s[i+30]=s[j+30]+1;              
               }        
       }
       if(s[i+30]>key) key=s[i+30];       
    }
    cout<<key;    
 
    return 0;
}
int main()
{
    int k,i,j,m,n,g,h,p,q=0,a[25],b[25],c[25];
	for(i=0;i<25;i++)
		b[i]=1;
	i=0;
    scanf("%d\n",&k);
    for(i=0;i<k;i++)
	{
		if(i==0)
			scanf("%d",&a[0]);
		else
			scanf(" %d",&a[i]);
	}
	if(k==1||k==0)
            printf("%d",k);
	else
	{
    for(j=k-2;j>=0;j--)
    {
         for(p=j+1;p<k;p++)
         {
               if(a[j]>=a[p])
               {
                    c[q]=b[p];
                    q++;
                }
          }
                  if(q==0)
                  b[j]=1;
		else if(q==1)
			 b[j]=c[0]+b[j];
		 else 
		 {
		 for(g=0;g<q-1;g++)
		 {
			 m=c[g];
			 n=c[g+1];
			 if(m>n)
			 {
				 c[g]=n;
				 c[g+1]=m;
			 }
		 }
         b[j]=c[q-1]+b[j];
         q=0;
		 g=0;
         p=j;
		 }
   }
    for(h=0;h<k-1;h++)
	{
		m=b[h];
		n=b[h+1];
		if(m>n)
		{
			b[h]=n;
			b[h+1]=m;
		}
	}
     printf("%d",b[k-1]);
	}
}
int f(int s[],int n);
void main()
{
	int k,a[25],i,N;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	N=f(a,k);
	printf("%d",N);
}

int f(int s[],int n)
{
	int i,b[25],j;
	int flag=0,flag2=0;
	int *p=s;
	for(i=0;i<n-1;i++)
		if(s[i]<s[i+1]) {flag=1;break;}
	if(flag==0) return n;
	else
	{for(i=1;i<n;i++)
	{if(s[i]>s[0]){flag2=1;break;}}
    if(flag2==0) return f(p+1,n-1)+1;
else 
	{
		b[0]=s[0];
		for(i=1,j=1;i<n;i++)
			if(s[i]<=s[0]) {b[j]=s[i];j++;}
	
			return ((f(p+1,n-1))>f(b,j)?(f(p+1,n-1)):f(b,j));
	} }
}
int main()
{
	int sum[100]={0},a[100];
	int n,i,j,max=0;
	scanf("%d",&n);
	for (i=0;i<n;i++) scanf("%d",&a[i]);
	for (i=n-1;i>=0;i--)
	{
		if(i==n-1) sum[i]=1;
		else 
		{
			for(j=i+1;j<=n-1;j++)
				if (a[j]<=a[i]) 
				{
					if(sum[j]>max) max=sum[j];
				}
			sum[i]=++max;
			max=0;
		}
	}
	max=0;
	for(i=0;i<=n-1;i++)
		if (sum[i]>max) max=sum[i];
	printf("%d",max);
	return 0;
}
int a[max+10];
int b[max+10];
int maxlen[max+10];
void main()
{
	int i,j,n;
	scanf("%d",&n);
	for(i=1;i<=n;i++){
		scanf("%d",&a[i]);
	}
	for(i=1;i<=n;i++){
		b[n+1-i]=a[i];
	}
	maxlen[1]=1;
	for(i=2;i<=n;i++){
		int tmp=0;
		for(j=1;j<i;j++){
			if(b[i]>=b[j]){
				if(tmp<maxlen[j]){
					tmp=maxlen[j];
				}
			}
		}
		maxlen[i]=tmp+1;
	}
	int nmax=-1;
	for(i=1;i<=n;i++){
		if(nmax<maxlen[i]){
			nmax=maxlen[i];
		}
	}
	printf("%d",nmax);
}
int max(int x,int y)
{
    if(x>=y)
    return x;
    else
    return y;
}
main()
{
      int i,j,k,m,n,res=0;
      scanf("%d",&n);
      int a[n];
      for(i=0;i<n;i++) 
      scanf("%d",&a[i]);
      int b[n],tem=0;
      for(i=0;i<n;i++) b[i]=0;
      b[n-1]=1;
      for(i=n-2;i>=0;i--)
      {
                         tem=0;
                         for(j=n-1;j>i;j--)
                         {
                                           if(a[i]>=a[j]) 
                                           tem=max(tem,b[j]);
                                           else
                                           continue;
                         }
                         b[i]=tem+1;
      }
      for(i=0;i<n;i++) res=max(res,b[i]);
      printf("%d",res);
      
}
int max[26]={0};
int a[26]={0};
void attack(int n)
{
	int i=0,j=0,premax=0;
	for(i=0;i<n;i++)
	{   max[i]=1;
		for(j=0;j<i;j++)
		{
			if(a[i]<=a[j])
			{
			premax=max[j]+1;
			if(premax>max[i])
			max[i]=premax;} 
		}
	}
}
int main()
{   static int n,i,num=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	scanf("%d",&a[i]);
	attack(n);
	num=max[0];
	for(i=1;i<n;i++)
	if(max[i]>num)
	num=max[i];
	printf("%d",num);
}
int changdu(int i,int n,int *a,int *b)
{
    int j,max=1;
    for(j=i+1;j<n;j++)
    {
                      if(a[i]>=a[j])
                      {
                                    b[i]=changdu(j,n,a,b)+1;
                                    if(b[i]>max)
                                    max=b[i];
                                    }
                                    }
    b[i]=max;
    return max;
}
main()
{
      int a[25],b[25];
      int n;
      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,n,a,b);
      for(i=0;i<n;i++)
      {
                      if(b[i]>max)
                      max=b[i];
                      }
      printf("%d",max);

      }
int main()
{
	int k,a[30],b[30],sum,i,j,m,p=0;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	scanf("%d",&a[i]);
	b[k-1]=1;
	for(i=k-1;i>0;i--)
	{
		if(a[i-1]>=a[i])b[i-1]=b[i]+1;
		else break;
	}
	for(j=i-1;j>=0;j--)
	{
		sum=b[k-1];
	   for(m=k-1;m>j;m--)
	  {
	      if(a[j]>=a[m]&&b[m]>=sum)
		   sum=b[m],p++;
	   }
	   if(p==0)b[j]=1;
	   else
	   {
	      b[j]=sum+1; 
	   }
	}
	sum=0;
	for(i=0;i<k;i++)
	{
		if(b[i]>sum)sum=b[i];
	}
	printf("%d",sum);
}
void main()
{
int a[25],b[25],k,i,j,max=0;
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]) {if(b[j]+1>b[i]) b[i]=b[j]+1;}
for(i=0;i<k;i++) 
 if (b[i]> max) max=b[i];  
printf("%d",max);
}
void f(int h[],int a[],int i)
{
	int t,j;
	for(j=0,t=0;j<i;j++) 
			if(h[j]>=h[i]&&a[j]>t) t=a[j]; 
	 a[i]=t+1;
}
void main() 
{ int a[25],k,h[25],t,i; 
	scanf("%d",&k); 
	for(i=0;i<k;i++) 
		scanf("%d",&h[i]);
	for(i=0;i<k;i++) f(h,a,i);	 
	for(i=0,t=0;i<k;i++) 
		if(a[i]>t) t=a[i];
	printf("%d\n",t); 
}
main()
{
     int n,i,j,d;
     scanf("%d",&n);
     int*p=(int*)malloc(n*sizeof(int));
     int*q=(int*)malloc(n*sizeof(int));
     for(i=0;i<n;i++) scanf("%d",&p[i]);
     q[n-1]=1;
     for(i=n-2;i>=0;i--)
     {
         q[i]=1;
         d=0;
         for(j=i+1;j<n;j++)
         {
             if(p[i]>=p[j])
               if(d<q[j]) d=q[j];
         }
         q[i]=q[i]+d;
     }
     for(i=0;i<n;i++)
     if(d<q[i]) d=q[i];
     printf("%d\n",d);
}
int lanjie(int m,int b[26],int lim) 
{ 
if(m==1)
 { 
if(b[0]<=lim)
return(1); 
else return(0);
 } 
else if(m==2) 
{ if(b[0]<=lim&&b[1]<=b[0])return(2); else if(b[0]>lim&&b[1]>lim)return(0); else return(1); } else { if(b[0]<=lim)return(lanjie(m-1,&b[1],b[0])+1>=lanjie(m-1,&b[1],lim)?lanjie(m-1,&b[1],b[0])+1:lanjie(m-1,&b[1],lim)); else return(lanjie(m-1,&b[1],lim)); } } void main() { int a[26],i,k; scanf("%d",&k); for(i=0;i<=k-1;i++) { scanf("%d",&a[i]); } getchar(); printf("%d\n",lanjie(k,a,32767)); }
struct dian
{
   int h;
   int x;
};
int Compare(const void*elem1,const void*elem2)
{
    struct dian *p1,*p2;
    p1=(struct dian*)elem1;
    p2=(struct dian*)elem2;
    return (*p2).h-(*p1).h;
}
main()
{
      int n,i,j,k;
      scanf("%d",&n);
      struct dian *d = (struct dian *)malloc(sizeof(struct dian)*(n));
      int *a= (int*)malloc(sizeof(int)*(n));
      for(i=0;i<n;i++)
      a[i]=1;
      for(i=0;i<n;i++)
      {
                        scanf("%d",&d[i].h);
                        d[i].x=i;
      }
      qsort(d,n,sizeof(struct dian),Compare);
      for(i=n-2;i>=0;i--)
      {
              for(j=i+1;j<n;j++)
              {
                           if(d[i].h==d[j].h&&d[i].x>d[j].x)
                           {
                                                            struct dian c;
                                                            c.x=d[i].x;
                                                            d[i].x=d[j].x;
                                                            d[j].x=c.x;
                           }
             }
     }                   
      for(i=n-2;i>=0;i--)
      {
              for(j=i+1;j<n;j++)
              {
                           if(d[i].x<d[j].x)
                           {
                                    if(a[i]<a[j]+1)
                                       a[i]=a[j]+1;
                           }
             }
     }                   
      int max=a[0];
      for(k=0;k<n;k++)
      { 
                        if(a[k]>max)
                        max=a[k];
       }                                 
      printf("%d",max);
      free(d);
      free(a);
      getchar();
      getchar();
      getchar();
}
int a[26],k,max=1;

void f(int i,int n)
{
	extern int a[26],k,max;
	int j;
	if(i==(k-1))
	{	
		if(n>max)
			max=n;
		return ;
	}
	for(j=i+1;j<k;j++)
	{
		if(a[i]>=a[j])
			f(j,n+1);
		else
		{
			if(n>max)
				max=n;
		}
	}
}

int main()
{
	extern int a[26],k,max;
	int i;
	scanf("%d",&k);
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);
	for(i=0;i<k;i++)
		f(i,1);
	printf("%d",max);
	return 0;
}
int count=0,a[25],n,d=0,h,k=0;
void f()
{
	int i,temp=count,temph=h;
	for(i=k;i<n;i++)
	{
		if(a[i]<=h){
		h=a[i];
		k=i+1;count++;
		d=count>d?count:d;
		f();
		count=temp;
		h=temph;
		}
	}
}



void main()
{
	int i,j,k;
	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%d",&a[i]);
	h=a[0];for(i=1;i<n;i++)if(a[i]>h)h=a[i];
	f();
	printf("%d",d);
}
int compare(int x,int y)
{
    if( x <= y){
        x=(y+1);
    }
    return x;
}

int main(void)
{

    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));
    for(j=0;j!=n;j++)
    {
        q[j] = 1;
        for(r=0;r!=j;r++){
            if(p[j] <= p[r]){
                q[j]=compare(q[j],q[r]);
            }

        }
    }
    int max;
    max=q[0];
    for(a=0;a<n;a++){
        if(q[a]>max)
        max=q[a];
    }
    printf("%d",max);
return 0;
}
int h[30];
int result[30];

int findFirstLess(int num)
{
	int index = 0;
	while(1)
	{
		if(result[index] < num)
			return index;
		index++;
	}
}

int main()
{
	int k, i = 0, r,p, ans;
	scanf("%d ", &k);
	while(1)
	{
		if(i >= k)
			break;
		scanf("%d", h + i);
		i++;
	}
	result[0] = h[0];
	i = 1;
	r = 0;
	while(i < k) // ????????, i.e. ???????
	{
		if(h[i] <= result[r]) // h?????????
			result[++r] = h[i]; //??
		if(h[i] > result[r])
			result[findFirstLess(h[i])] = h[i];
		i++;
	}
//	printf()
	

	//??????????
/*
	i = 0;
	p = 0;
	ans = 0;
	while(i < k)
	{
		if(h[i] == result[p + 1])
		{
			p++;
			continue;
		}
		if(h[i] == result[p])
			ans++;
		i++;
	}
*/
	printf("%d\n", r+1);

	return 0;
}
/*
 * 1.cpp
 *
 *  Created on: 2011-6-8
 *      Author: 09119
 */
int k;
int high[30];
int ff(int pos,int highflag,int count)
{
	if(pos == k)
		return count;
	if(high[pos] <= highflag)
	{
		int tmp1 = ff(pos+1,high[pos],count+1);
		int tmp2 = ff(pos+1,highflag,count);
		if(tmp1 > tmp2 )
			return tmp1;
		else
			return tmp2;
	}
	else
	{
		return ff(pos+1,highflag,count);
	}
}
int main()
{
	int i;
	cin>>k;
	for(i=0;i<k;i++)
	{
		cin>>high[i];
	}
	int result = ff(0,99999,0);
	cout<<result<<endl;
	return 0;
}
int k; //???
int mis[30];
int maxL =0;
int curH =100000;
int getNum=0;
int cmp(int a, int b)//????
{
     if(a>b) return 0;
     else return 1;
}


void oneState(int id)
{
     if(id >= k)
     {
          if(getNum>maxL)
			  maxL = getNum;
		  return;
     }

   
    if(mis[id]<=curH)//??
    {    
	   int t =curH;
       curH = mis[id];
       getNum++;

		oneState(id+1);
        
		curH = t;
		getNum--;

	}

    
	oneState(id+1);
        
	}



int main()
{
	cin>>k;
	for(int i=0;i<k;i++)
	{
		cin>>mis[i];
	}
    oneState(0);
	cout<<maxL<<endl;

   return 0;
}
main()
{
      int k,i,j;
      scanf("%d",&k);
      int h[k],n[k];
      for(i=0;i<k;i++)
          scanf("%d",&h[i]);
      for(i=k-1;i>=0;i--)
      {
          int max=0;
          for(j=i+1;j<k;j++)
              if(h[j]<=h[i]&&n[j]>max) max=n[j];
          n[i]=max+1;
      }
      int Max=0;
      for(i=0;i<k;i++)
          if(n[i]>Max) Max=n[i];
      printf("%d\n",Max);
}
int main()
{
    int n,m=0,a[100001]={100000000}; 
    scanf("%d",&n);
    for (int i=1;i<=n;i++)
    {
        int t;           
        scanf("%d",&t);     
        int j=m;   
        while (a[j]<t) j--;         
        a[++j]=t;
        m=j>m?j:m;
    }
    printf("%d\n",m);
    getchar();
    getchar();
    return 0;
}
int max(int s[],int n)
{
	int i,d=0;
	for(i=0;i<n;i++)
	{
		if(s[i]>d)
			d=s[i];
	}
	return d;
}
void bl(int h[],int s[],int m)
{
	int i,j;
	for(i=0;i<m;i++)
	{
		if(i==0)
			s[i]=1;
		else
		{
			s[i]=1;
			for(j=0;j<i;j++)
				if(h[j]>=h[i]&&(s[j]+1)>s[i])
				{
					s[i]=s[j]+1;
				}
		}
	}
}
void main()
{
	int r,i,n;
	scanf("%d",&n);
	int h[26],d[26]={0};
	for(i=0;i<n;i++)
		scanf("%d",&h[i]);
	bl(h,d,n);
	r=max(d,n);
	printf("%d",r);
}
int main()
{
	int k,a[100]={0},i=0,j=0,d[100]={0},c=0,max=1;
	scanf("%d",&k);
	for(i=0;i<=k-1;i++)
		scanf("%d",&a[i]);
	d[k-1]=1;
	for(i=k-2;i>=0;i--)
	{
		for(j=k-1;j>i;j--)
		{
			if((d[j]>c)&&(a[j]<=a[i]))
				c=d[j];
		}
		d[i]=c+1;
		c=0;
	}
	for(i=0;i<=k-1;i++)
	{
		if(d[i]>max)
			max=d[i];
	}
	printf("%d",max);
}
int dp[100];
int main(void)
{
    int i,j,k;
    int *h;
    int max;
    scanf("%d",&k);
    h=(int *)malloc((k+1)*sizeof(int));
    for(i=1;i<=k;i++)
    {
        scanf("%d",&h[i]);
    } 
    dp[k]=0;
    for(i=k-1;i>=0;i--)
    {
        max=0;
        for(j=i+1;j<=k;j++)
        {
            if(h[i]>=h[j])
            {
                 if(dp[j]+1>max)
                     max=dp[j]+1;             
            }
        }
        dp[i]=max;                   
    }
    int m=0;
    for(i=0;i<=k;i++)
    {
        if(dp[i]>m)
            m=dp[i];
    } 
    printf("%d",m+1);
    return 0;  
}
int a[25];
int result[25];

int main()
{
	int k;
	cin>>k;
	for(int i = k - 1; i >= 0; i--)
		cin>>a[i];

	result[0] = 1;
	for(int i = 1; i < k; i++)
	{
		int j = i - 1;
		while(j >= 0)
		{
			if(a[j] <= a[i])
			{
				if(result[j] > result[i])
					result[i] = result[j];
			}
			j--;
		}
		result[i]++;
	}

	int t = 0;
	for(int i = 0; i < k; i++)
	{
		if(result[i] > t)
			t = result[i];
	}

	cout<<t;
}
int leap(int n)
{
	if(n%4==0&&n%100!=0)
	{
		return 1;
	}
	else if(n%400==0)
	{
		return 1;
	}
	else
	{
		return 0;
	}
}
void main()
{
	int year,month,day,x;
	scanf("%d %d %d",&year,&month,&day);
	if(leap(year)==1)
	{
		if(month==1)
		{
			x=day;
		}
		if(month==2)
		{
			x=day+31;
		}
		if(month==3)
		{
			x=day+60;
		}
		if(month==4)
		{
			x=day+91;
		}
		if(month==5)
		{
			x=day+121;
		}
		if(month==6)
		{
			x=day+152;
		}
		if(month==7)
		{
			x=day+182;
		}
		if(month==8)
		{
			x=day+213;
		}
		if(month==9)
		{
			x=day+244;
		}
		if(month==10)
		{
			x=day+274;
		}
		if(month==11)
		{
			x=day+305;
		}
		if(month==12)
		{
			x=day+335;
		}
	}
	else
	{
		if(month==1)
		{
			x=day;
		}
		if(month==2)
		{
			x=day+31;
		}
		if(month==3)
		{
			x=day+59;
		}
		if(month==4)
		{
			x=day+90;
		}
		if(month==5)
		{
			x=day+120;
		}
		if(month==6)
		{
			x=day+151;
		}
		if(month==7)
		{
			x=day+181;
		}
		if(month==8)
		{
			x=day+212;
		}
		if(month==9)
		{
			x=day+243;
		}
		if(month==10)
		{
			x=day+273;
		}
		if(month==11)
		{
			x=day+304;
		}
		if(month==12)
		{
			x=day+334;
		}
	}
	printf("%d",x);
}
int main(){
    int year,month,day,sum=0;
    int monthday[12]={31,29,31,30,31,30,31,31,30,31,30,31};
    scanf("%d%d%d",&year,&month,&day);
     for(int i=1;i<month;i++){
            sum+=monthday[i-1];
    }
    sum+=day;
    if(month>2&&(!year%4==0&&year%100!=0||year%400!=0)){
            sum-=1;
    }
    printf("%d",sum);
        return 0;
}