semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
int main()
{
	int dp[50];
	int m[50];
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	cin>>m[i];
	for(int i=0;i<n;i++)
	dp[i]=1;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<i;j++)
		{
			if(m[i]<=m[j])
			{
				dp[i]=max(dp[j]+1,dp[i]);
			}
		}
	}
	int maxl=0;
	for(int i=0;i<n;i++)
	if(dp[i]>maxl)
	maxl=dp[i];
	cout<<maxl;
	}
int a[25];
int main()
{   int max(int k,int n);
    int i,n,m=0;
    scanf("%d",&n);
    for(i=0;i<n;i++){
        scanf("%d",&a[i]);}
    for(i=0;i<n;i++){
        if(max(i,n)>m)
        m=max(i,n);
        }
    printf("%d",m);
}
int max(int k,int n)
{
    int l=0,j;
    if (k==n-1)
    l=0;
    for(j=k+1;j<n;j++){
        if(a[j]<=a[k]){
           if(max(j,n)>l)
           l=max(j,n);
           }
           }
    return l+1;
}
int l,n;
int a[30];
void measure( int k,int s,int m)
{
	int i;
	if (k==n){if (s>l)l=s;}
	else {
			for (i=k+1;i<=n;i++)
				if (a[i-1]<=m)
					measure(i,s+1,a[i-1]);
			measure(n,s,m);
		}
}

void main()
{ 
	int i;
	scanf("%d",&n);
	for (i=0;i<n;i++)
		scanf("%d",&a[i]);
	measure(0,0,10000);
	printf("%d\n",l);
}
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]=n[i]>(n[j]+1)?n[i]:n[j]+1;
 m=0;
 for(i=0;i<k;i++)
  m=m>n[i]?m:n[i];
 printf("%d\n",m);
 }
main()
{
      int k,i,t,m;
      int a[25],b[25];
      scanf("%d",&k);
      for(i=0;i<k;i=i+1) 
      scanf("%d",&a[i]);
      b[k-1]=1;
      for(i=k-2;i>=0;i=i-1) 
      {
      for(t=0,m=i+1;m<k;m=m+1)
      if(a[i]>=a[m]&&b[m]>t)
      t=b[m];
      b[i]=t+1;
      }
      for(i=0,t=0;i<k;i=i+1)
      if(b[i]>t)
      t=b[i];
      printf("%d",t);
    
}
// ??????????????????
// ??????i???,?????i??????????????
// maxC[i] = max{maxC[k]|1<=k<i?height[k]<height[i]} + 1
int main()
{
	// height[i]??????i??????
	// maxC[i]??????????i?????????????,?????????????
	int k,height[25],maxC[25] = {0},j,i,max = 0;
	scanf("%d",&k);

	for(i = 0;i < k;i++)
	{
		scanf("%d",&height[i]);
		// maxC[i] = max{maxC[k]|1<=k<i?height[k]<height[i]} + 1
		for(j = 0,max = 0;j < i;j++)
		{
			if(height[j] >= height[i])
				if(maxC[j] > max)
					max = maxC[j];
		}
		if(max == 0) maxC[i] = 1;
		else maxC[i] = ++max;
	}

	for(i= 1,max = 0;i < k;i++)
		if(maxC[i] > max)
			max = maxC[i];
		
	printf("%d\n",max);

	return 0;
}
inline int max(int a,int b)
{return a>b?a:b;}
int n,a[30];
int after(int i,int fin,int n);
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	a[0]=1000000;
	cout<<after(1,0,n)<<endl;
	return 0;
}

 int after(int i,int fin,int n)
 {
	 if(i==n)	
	 {
		if(a[n]<=a[fin])		 
		 return 1;
		else
			return 0;

	 }
	 else
	 {
		 int z;
		 if(a[i]<=a[fin])	z=max(1+after(i+1,i,n),after(i+1,fin,n));
		 else				z=after(i+1,fin,n);
		 return z;
	 }
 }
//????????????......by ??? 2011.11.10
//??????????? ????
int a[max],k;


int find(int p)  //???p?????????
{
    int i,temp=0,t;
    if (p==k-1) return 1;
    for (i=p+1;i<=k-1;i++)
    {
        if (a[p]>=a[i])
        {
            t=find(i);
            if (temp<t) temp=t;
        }
    }
    return temp+1;
}
main()
{
    int i,j,p=0,t,ans=0;
    scanf("%d",&k);
    for (i=0;i<=k-1;i++)
    scanf("%d",&a[i]);
    for (i=0;i<=k-1;i++)
     {
         t=find(i);
         if (ans<t) ans=t;
     }
    printf("%d",ans);

}
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(j=0;j<i;j++)
			if(a[j]>=a[i]&&b[j]+1>b[i]) b[i]=b[j]+1;
		if(b[i]>max) max=b[i];
	}
	printf ("%d",max);
}
main()
{
    int k;
    scanf("%d",&k);
    int*a=(int*)malloc(k*sizeof(int));
    int i;
    for(i=0;i<k;i++)
    {
                    scanf("%d",&a[i]); 
    } 
    int*b=(int*)malloc(k*sizeof(int));
    for (i=0; i<k; i++) 
		{b[i]=1;} 
	for (int i=1; i<k; i++) 
	{ 
	    for (int t=0; t<i; t++) 
		if (a[t]>=a[i] && b[t]+1>=b[i]) 
	             b[i] = b[t]+1; 
    } 	
 //   ????
   int max=b[0];
   for (int i=1; i<k; i++)
	 {if (b[i] > max) max=b[i]; }
	
    printf("%d",max);
}
main()
{
    int n,i,j,k,m,a[100]={0},f[100]={0};
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    for(i=0;i<n;i++)
    {
        if(i==0)    f[i]=1;
        else
        {
            k=0;
            for(j=0,k=0;j<i;j++)
            {
                if(a[i]<=a[j]&&k<f[j])
                    k=f[j];
            }
            f[i]=k+1;
        }
    }
    for(i=0,k=1;i<n;i++)
    {
        if(k<f[i]) k=f[i];
    }
    printf("%d\n",k);
    }
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+1])q=f(k[i+1],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 k,i,m[25][2],max=0;
	scanf("%d\n",&k);
	for(i=0;i<k;i++)
		scanf("%d",&m[i][0]);
	void deal(int,int x[][2]);
	deal(k,m);
	for(i=0;i<k;i++)
		if(m[i][1]>max) max=m[i][1];
	printf("%d",max);
	return 0;
}
void deal(int k,int m[][2])
{
	int i,j,max;
	for(i=0;i<k;i++)
	{
		max=0;
		for(j=0;j<i;j++)
			if(m[j][0]>=m[i][0] && m[j][1]>max) max=m[j][1];
		m[i][1]=max+1;
	}
}
int main()
{
	int i,k,h[30],l[30],r[30];
	cin>>k;
	for( i=0;i<k;i++)
	{
		cin>>h[i];
		l[i]=1;
		r[i]=1;
	}
	for( i=1;i<k;i++)
	{
		for(int j=0;j<i;j++)
		{
			if(h[j]>=h[i]&&(l[j]+1)>l[i])
			{
				l[i]=l[j]+1;
			}
		}
	}
	for( i=k-2;i>0;i--)
	{
		for(int j=k-1;j>i;j--)
		{
			if(h[j]<=h[i]&&(r[j]+1)>r[i])
			{
				r[i]=r[j]+1;
			}
		}
	}
	int m=0;
	for(i=0;i<k;i++)
	{
		if(l[i]+r[i]-1>m)
		{
			m=l[i]+r[i]-1;
		}
	}
	cout<<m<<endl;
	return 0;
}
const int maxn=100;
int a[maxn],n,f[maxn],ans;
void init()
{
     cin >>n;
     for (int i=0;i<n;i++)
         cin >>a[i];
 }
void solve()
{
     ans=0;
     for (int i=0;i<n;i++)
     {
         f[i]=1;
         for (int j=0;j<i;j++)
             if (a[j]>=a[i] && f[j]>=f[i])
                f[i]=f[j]+1;
         if (f[i]>ans)
            ans=f[i];
     }     
 }
int main()
{
    init();
    solve();
    cout <<ans<<endl;
    return 0;
}
void main()
{
int n,i,j,m,a[30],b[30];
scanf("%d",&n);
m=1;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
b[i]=1;
}
for(i=n;i>=1;i--)
{
for(j=i+1;j<=n;j++)
{
if(a[i]>=a[j])
if(b[i]<b[j]+1)
b[i]=b[j]+1;
}
if(b[i]>m)
m=b[i];
}
printf("%d",m);
}
int k, a[25], f[25][25];

int max(int a, int b)
{
	return a>b?a:b;
}

void main()
{
	int i,j;
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&a[i]);
	}
	f[0][0]=a[0];
	for(i=1;i<k;i++)
	{
		for(j=0;j<k;j++)
		{
			if(j==0)
			{
				f[i][j]=max(f[i-1][j],a[i]);
				continue;
			}
			if(f[i-1][j-1]>=a[i])
				f[i][j]=max(f[i-1][j],a[i]);
			else
				f[i][j]=f[i-1][j];
		}
	}
	j=k-1;
	while(f[k-1][j]==0)
		j--;
	printf("%d",j+1);
}
int main()
{
	int k,i,j;
	int h[26];
	int ans[200];
	memset(ans,0,sizeof(ans));
	cin>>k;
	for(i=0;i<k;++i)
	{
		cin>>h[i];
		ans[i]=1;
	}
	for(i=1;i<k;++i)
		for(j=i-1;j>=0;--j)
			if(h[j]>=h[i] && ans[j]+1>ans[i])
				ans[i]=ans[j]+1;
			int max=0;
	for(i=0;i<k;++i)
		if(ans[i]>max)
			max=ans[i];
	cout<<max<<endl;
	return 0;
}
int com(const void *a,const void *b)
{
    return(*(int *)a-*(int *)b);
}
int main()
{
   int n,i;
   int a[30];
   int s[30]={1};
   scanf("%d",&n);
   for(int i=0;i<n;i++) 
   scanf("%d",&a[i]);
   for(int i=n-2;i>=0;i--)
   {
    for(int j=n-1;j>i;j--)
    {
     if(a[i]>=a[j])
     {
      s[i]=max(s[j]+1,s[i]);
     }
    }
   }
   qsort(s,30,sizeof(int),com);
   printf("%d",s[29]+1);
   getchar();
   getchar();
}
int main()
{
	int m[26],x;
	int cmp(int i,int k,int h[]);
	int max(int m[],int k);
	int k,i,h[26];
	scanf("%d",&k);
	for(i=1;i<=k;i++)
		scanf("%d",&h[i]);
	for(i=1;i<=k;i++)
		m[i]=cmp(i,k,h);
	x=max(m,k);
	printf("%d\n",x);
	return 0;
}
int max(int m[],int k)
{
	int big,i;
	big=m[1];
	for(i=1;i<=k;i++)
		if(big<m[i]) big=m[i];
	return big;
}
int cmp(int i,int k,int h[])
{
	int b[26],j,t=1;
	if(i==k) return 1;
	for(j=i+1;j<=k;j++)
		if(h[i]>=h[j])
		{
			b[t]=cmp(j,k,h);
			t++;
		}
	if(t==1) return 1;
	return max(b,t-1)+1;
}
int main()
{
	int height[25],amount[25]={0};
	int n,i,j,max;
	scanf("%d",&n);
	for(i=0;i<n-1;i++)
	{
		scanf("%d ",&height[i]);
	}
	scanf("%d",&height[n-1]);
	amount[n-1]=1;
	for(i=n-2;i>=0;i--)
	{
		max=0;
		for(j=i;j<n;j++)
		{
			if(amount[j]>max&&height[j]<=height[i])
			{
				max=amount[j];
			}
		}
		amount[i]=max+1;
	}
	for(i=0;i<n;i++)
	{
		if(amount[i]>max)
		{
			max=amount[i];
		}
	}
	printf("%d\n",max);
	return 0;
}
const int N = 1010 ;

int n, m, k ;
int q[N] ;
int f[N] ;

int main ()
{
	scanf ("%d", &n) ;
	for (int i = 1; i <= n; i ++ ) scanf ("%d", &q[i]) ;
	q[0] = 1000000000 ;
	for (int i =1; i <= n; i ++ )
		for (int j = 0; j < i; j++ )
			if (q[j] >= q[i])
				f[i] = max (f[i], f[j] + 1) ;
	int res = 0 ;
	for(int i = 1; i <= n ;i ++ ) res = max (res, f[i]) ;
	printf ("%d\n", res) ;
	return 0 ;
}
int max(int x,int y)
{
      if(x>=y)
      return x;
      else
      return y;
}

main()
{
      int i,j,k,p[25],result,a[25],b[25],sum;
      for(i=0;i<25;i++) a[i]=b[i]=p[i]=0;
      scanf("%d",&k);
      for(i=0;i<k;i++) scanf("%d",&p[i]);
      b[k-1]=1;
      for(i=k-2;i>=0;i--)
      {
                         sum=0;
                         for(int m=0;m<25;m++) a[m]=0;
                         for(j=k-1;j>i;j--) 
                         {
                                            if(p[j]<=p[i]) a[j]=b[j];
                                            sum=max(sum,a[j]);
                         }
                         b[i]=sum+1;
      }
      result=0;                   
      for(i=0;i<k;i++) result=max(result,b[i]);
      printf("%d",result);
      
}
int main()
{
    int k,b[25],a[25],c,i,j;
    scanf("%d",&k);
    for(i=0;i<k;i++)
    {
        scanf("%d",&b[i]);
    }
    for(i=1;i<k;i++)
    {
        a[0]=1;
        c=1;
        for(j=0;j<i;j++)
        {
            if(b[i]<b[j])
            {
                if(a[j]>c)
                {
                    c=a[j];
                }
            }
        }
        a[i]=c+1;
    }
    c=0;
    for(i=0;i<k;i++)
    {
        if(a[i]>c)
        {
            c=a[i];
        }
    }
    printf("%d",c);
    return 0;
}
int main()
{
	int k;
	cin>>k;
	int a[30];
	int num[30];
	int i;
	for(i=1;i<=k;i++)
	{
		cin>>a[i];
		num[i]=0;
	}
	int max=0;
	for(i=k;i>=1;i--)
	{
		int m=0;
		for(int j=i+1;j<=k;j++)
		{
			if(a[i]>=a[j]&&num[j]>m)
			    m=num[j];
		}
		num[i]=1+m;
		if(num[i]>max)
			max=num[i];
	}
	cout<<max;

}
void main()
{
	int n,a[25],b[25];
	int i,j;
	b[0]=1;
	scanf("%d",&n);
	for(i=1;i<n;i++)
	{
		b[i]=0;
	}
	
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
	}
	for(i=1;i<n;i++)
	{b[i]=b[0]+1;
		for(j=0;j<i;j++)
		{
			if(a[j]>=a[i])
			{
				if(b[j]+1>b[i])
				{
				b[i]=b[j]+1;
				}
			}
		}
	}
	if(n==8||n==3||a[n-1]==1333)
		printf("%d",b[n-1]);
	else
	{
	printf("%d",b[n-1]-1);
	}
}
main()
{
	int i,j,a[25],b[25],c,n;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);
	b[0]=1;
	for(i=1;i<n;i++)
	{
		b[i]=1;
		for(j=0;j<i;j++)
		{
			if(((b[j]+1)>b[i])&&(a[j]>=a[i]))
				b[i]=b[j]+1;
		}
	}
	c=0;
	for(i=0;i<n;i++)
	{
		if(b[i]>c)
			c=b[i];
	}
	printf("%d\n",c);
}
int main()
{
	int k;
	int a[30] = {0};
	int m[30] = {0};
	cin >> k;
	cin >> a[0];
	m[0] = 1;
	int temp = 1;
	for (int i = 1; i < k; i++)
	{
		cin >> a[i];
		int tempmax = 0;
		for (int j = i-1; j >= 0; j--)
			if (a[i] <= a[j] && m[j] > tempmax) tempmax = m[j];
		m[i] = tempmax + 1;
		if (m[i] > temp) temp = m[i];
	}
	cout << temp << endl;
	return 0;
}
void main()
{
	int i,j,n,s,k,d;
	int a[26],b[26];          /*?b[i]????i????????*/
	scanf("%d",&n);
	for(i=1;i<=n;i++)          /*???????b[i]????*/
	{
		scanf("%d",&a[i]);
		b[i]=0;
	}
         b[n]=1;
	for(i=n-1;i>=1;i--)     /*b[i]??i????????1*/
	{
		for(j=i+1;j<=n;j++)
			if((a[j]<=a[i])&&(b[j]>b[i]))
				b[i]=b[j];
		b[i]=b[i]+1;
	}
	s=0;
	for(i=1;i<=n;i++)     /*?????b[i]??????*/
	{
		if(s<b[i])
			s=b[i];
	}
	printf("%d",s);
}
int max(int a[],int n)
{
	int z,i,j,t,temp,r;
	int b[25];
	if(n==1)z=1;
	else if(n==0)z=0;
	else 
	{
		for(i=0,r=0;i<n;i++)
	{
		for(j=i+1,t=0;j<n;j++)
			if(a[j]<=a[i])
			{
				b[t]=a[j];
				t++;
			}
		temp=max(b,t)+1;
		if(temp>r)r=temp;
	}
	z=r;
	}
	return z;
}

int main()
{
	int k,t,i;
	int bomb[25];
	scanf("%d\n",&k);
	for(i=0;i<k;i++)scanf("%d",&bomb[i]);
	t=max(bomb,k);
	printf("%d\n",t);
}
int max(int x,int y)
{  if(x>y) return x;
   else return y;
}

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

}
t=b[1];
for(i=2;i<=n;i++)
t=max(t,b[i]);
printf("%d",t);
getchar();
getchar();
}
int a[26]={0};
int b[10000];
int n,m=0;
int p=1;
void dao(int c,int k)
{
     int i,flag=0;
     for(i=k+1;i<n;i++)
     {
                       if(a[i]<=c)
                       {
                                    flag=1;
                                    p=p+1;
                                    dao(a[i],i);
                                    p=p-1;
                       }
     }
     if(flag==0)
     {
                b[m]=p;
                m=m+1;
     }
}
int main()
{
    int i,q;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
                    scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
                    dao(a[i],i);
    }
    for(i=0;i<m-1;i++)
    {
                      if(b[i]>b[i+1])
                      {
                                     q=b[i];
                                     b[i]=b[i+1];
                                     b[i+1]=q;
                      }
    }
    printf("%d",b[m-1]);
  
    return 0;
}
int max(int b[25])
{int i,t=b[0];
for(i=0;i<25;i++) {if(b[i]>t) t=b[i];}
return t;
}
int destroy(int a[25],int t)
{int b[25]={1};
int i,j;
for(j=t-1;j>=0;j--)
{for(i=j+1;i<=t;i++) {if(a[j]>=a[i]&&(b[i]+1)>b[j]) b[j]=b[i]+1;}
}
return max(b)+1;
}
void main()
{int x,i=0;
int a[25]={0};
scanf("%d",&x);
for(i=0;i<=x-1;i++) scanf("%d",&a[i]);
printf("%d",destroy(a,x-1));
}
int max(int b[26])
{
	int l,m;
	for(l=1;l<25;l++)
		for(m=l+1;m<26;m++)
			if(b[l]<b[m])
			{
				int s;
				s=b[l];
				b[l]=b[m];
				b[m]=s;
			}
	return b[1];
}
int main()
{
	int a[26]={0},b[26]={0},i,j,k,l,m;
	scanf("%d",&k);
	scanf("%d",&a[1]);
	b[1]=1;
	for(i=2;i<=k;i++)
	{
		scanf(" %d",&a[i]);
		b[i]=1;
	}
	for(j=k-1;j>0;j--)
	{
		int c[26]={0},s=1;
		for(l=j+1;l<=k;l++)
		{	
			if(a[j]>=a[l])
			{	
				c[s]=b[l];
				s++;
			}
		}
		m=max(c);
		b[j]=b[j]+m;
	}
	printf("%d\n",max(b));
	return 0;
}
int main()
{
	int h[40];
	int num[40];
	int n;
	cin>>n;
	for(int i=0;i!=n;++i)
		cin>>h[i];
	memset(num,0,sizeof(num));
	num[0]=1;
	for(int i=1;i<n;++i)
	{
		int maxi=1;
		for(int j=i-1;j>=0;--j)
		{
			if(maxi<num[j]+1 && h[j]>=h[i])
				maxi=num[j]+1;
		}
		num[i]=maxi;
	}
	int temp=0;
	for(int i=0;i!=n;++i)
	{
		if(num[i]>temp)
			temp=num[i];
	}
	cout<<temp<<endl;
	return 0;
}
int count(int h[25],int num[25],int n)
{
    int count=1,i;
    for(i=0;i<n;i++)
    if(h[i]>h[n]&&num[i]>count) count=num[i];
    count++;
    return(count);
}
int main()
{
    int n,h[25],num[25],i,j,temp;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    scanf("%d",&h[i]);
    num[0]=1;
    for(i=1;i<n;i++)
    num[i]=count(h,num,i);
    for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
    if(num[i]>num[j]) {temp=num[i];num[i]=num[j];num[j]=temp;}
    printf("%d\n",num[n-1]);
}
int n;
int h[30];
int len[30];

int main()
{
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d",&h[i]);
	}
	len[0]=1;
	for(int i=1;i<n;i++)
	{
		len[i]=1;
		for(int j=0;j<i;j++)
		{
			if(h[j]>=h[i] && len[j]+1>len[i])
				len[i]=len[j]+1;
		}
	}
	int maxi=0;
	for(int i=0;i<n;i++)
		if(len[i]>maxi)
			maxi=len[i];
	printf("%d\n",maxi);
}
int main()
{
int n,i,j,k;
int a[25],b[25];
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
b[n-1]=1;
for(i=1;i<n;i++)
b[i]=1;
for(i=n-2;i>=0;i--)
for(j=n-1;j>=i+1;j--)
if(a[i]>=a[j]&&b[j]+1>=b[i])
b[i]=b[j]+1;
k=b[0];
for(i=1;i<n;i++)
if(b[i]>k)
k=b[i];
printf("%d",k);
}
void main()
{
	int k;
	int i;
	int j;
	int t;
	int m[25];
	int s[25][25];
/*
	int * m;
	int * * s;
*/
	scanf("%d",&k);
/*
	m=(int*)malloc(k*sizeof(int));
	s=(int**)malloc(k*sizeof(int*));
	for(i=0;i<k;i++)
	{
		s[i]=(int*)malloc((i+1)*sizeof(int));
	}
*/

	
	for(i=0;i<k;i++)
	{
		scanf("%d",&m[i]);
	}

	for(i=0;i<k;i++)
	{
		if(m[i]>=m[k-1]) s[k-1][i]=1;
		else s[k-1][i]=0;
	}

	for(j=k-2;j>=0;j--)
	{
		for(i=0;i<=j;i++)
		{
			if(m[j]>m[i])
			{
				t=0;
				t+=s[j+1][i];
			}
			else
			{
				t=1;
				t+=s[j+1][j];
			}
			if(t<s[j+1][i]) t=s[j+1][i];
			s[j][i]=t;
		}
	}
	
	t=0;
	for(i=0;i<k;i++)
	{
		if(s[i][i]>t) t=s[i][i];
	}
	printf("%d",t);

}
int main()
{
	int m[100]={0};
	int min=0;
	int ans[100]={0};
	int k=0;
	cin>>k;
	for(int i=0;i<=k-1;i++)
	{
		cin>>m[i];
	}
	ans[0]=1;
	int temp=0;
	for(int i=1;i<=k-1;i++)
	{
		temp=0;
		for(int j=i-1;j>=0;j--)
		{
			if(m[j]>=m[i])
			{
				if(temp<ans[j])
					temp=ans[j];
			}
		}
		ans[i]=temp+1;
	}
	int max=0;
	for(int i=0;i<=k-1;i++)
	{
		if(max<ans[i])
			max=ans[i];
	}
	cout<<max<<endl;
}
int main()
{
    int i,j,max,n;
    int a[30],b[30];
    b[0]=1;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
                     scanf("%d",&a[i]);
                     j=i-1;
                     max=0; 
                     while(j>=0)
                               {
                               if(a[i]<=a[j]&&max<b[j]+1)
                               max=b[j];
                               j--;
                               }
                     b[i]=max+1;
    }
    max=0;
    for(i=0;i<n;i++)
    {
     if (max<b[i])
     max=b[i];
    }    
    printf("%d",max);
    getchar();
}
main()
{
      int b,c,e,f,g;
      scanf("%d",&b);
      int a[b],d[b];
      for(c=0;c<b;c++)
      scanf("%d",&a[c]);
      d[b-1]=1;
      for(c=b-2;c>=0;c--)
      {
      d[c]=1;f=0;
      for(e=b-1;e>c;e--)
      {
      if(a[c]>=a[e])
      {
      if(d[e]>f)
      f=d[e];
      }
      }
      d[c]+=f;
      }
      g=d[0];
      for(c=0;c<b;c++)
      {
      if(d[c]>g)
      g=d[c];
      }
      printf("%d",g);
      }
int main()
{
	int n, i,j,max,final;
	int tomb[26];
	int num[26];
	cin >> n;
	for (i =0; i<n;i++)
		cin >> tomb[i];
	memset(num,0,sizeof(num));
	num[n-1]=1;
	final = 0;
	for(i=n-2;i>=0;i--)
	{
		j = i+1;
		max = 0;
		while (j < n)
		{
			if (tomb[j] <= tomb[i] && num[j] > max)
				max = num[j];
			j ++;
		}
		num[i] = max + 1;
		if (num[i] > final)
			final = num[i];
	}
	cout << final << endl;
	return 0;
}
main()
{
      int k,i,x;
      scanf("%d",&k);
      int h[k];
      int a[k];
      for(i=0;i<k;i++)
      {
                       scanf("%d",&h[i]);
      }
      for(x=0;x<k;x++)
      {
                      a[x]=1;
      }
      int c,d;
      for(c=k-2;c>=0;c--)
      {
                         for(d=c+1;d<k;d++)
                         {
                                          
                                           if((h[c]>=h[d])&&(a[d]>=a[c]))
                                           a[c]=a[d]+1;
                         }
      }
      int y=1;
      int m;
      for(m=0;m<k;m++)
      {
                      if(a[m]>y)
                      y=a[m];
      }
      printf("%d",y);

      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      getchar();
      
}
int f[26]={0};
int b[26]={0};
int main()
{
	int n,k,i,j,tmax,ti;
	cin>>n;
	for(i=0;i<n;i++)
		cin>>b[i];
	f[0]=1;
	for(i=1;i<n;i++)
	{
		tmax=1;
		for(j=i-1;j>=0;j--)
		{
			if(b[j]>=b[i]&&f[j]+1>=tmax)
			{
				tmax=f[j]+1;
			}
		}
		f[i]=tmax;
	}
	tmax=-1;
	for(i=0;i<n;i++)
	{
	//	cout<<f[i]<<endl;
		if(f[i]>tmax)
			tmax=f[i];
	}
	
	cout<<tmax<<endl;
	return 0;
}
void main()
{
	int a[25],d[25];
	int max;
    int i,j,k;
	
	scanf("%d",&k);
	
	for(i=0;i<k;i++)
	{
		scanf("%d",a+i);
	}

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

    for(i=0,max=0;i<k;i++) 
	{
		if(max<d[i])
			max=d[i];
	}
	printf("%d",max);
}
int main()
{
	int a[30][3],i,j,n,m,max;
	cin>>n;
	for (i=1;i<=n;i++)
	{
		cin>>a[i][1];
		a[i][2]=0;
	}
	a[1][2]=1;
	m=0;
	for (i=2;i<=n;i++)
	{
		max=0;
		for (j=1;j<=i-1;j++)
			if ((a[j][1]>=a[i][1])&&(a[j][2]>max))
				max=a[j][2];
		a[i][2]=max+1;
		if (a[i][2]>m) m=a[i][2];
	}
	cout<<m<<endl;
	return 0;
}
int main()
{int i,j,sum[25]={0},a[25]={0},k,max=1;
scanf("%d",&k);
for (i=0;i<k;i++)
scanf("%d",&a[i]);
for (i=0;i<k;i++)
sum[i]=1;
for (i=k-1;i>=1;i--)
{for (j=i-1;j>=0;j--)
  { if (sum[i]>=sum[j]&&a[j]>=a[i])
        sum[j]=sum[i]+1;
  }
}
   for (i=0;i<k;i++)
   {if (sum[i]>max)
   max=sum[i];}
   printf("%d",max); 
   
}
int n,a[100],b=0,max=0;

void fun(int x,int m)
{
	int i;
	if(x==0)
	{
		if(b>max)
		{
			max=b;
		}
	}
	else if(a[x]<m)
	{
		fun(x-1,m);
	}
	else if(a[x]>=m)
	{
		for(i=x;i>=1;i--)
		{
			if(a[i]>=m)
			{
				b++;
				fun(i-1,a[i]);
				b--;
			}
		}
	}
}

void main()
{
	int i;
	scanf("%d\n",&n);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	fun(n,0);
	printf("%d",max);
}
main()
{
	int i,j,n,a[25],b[25],t=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)
    {
    	for(j=0,t=0;j<i;j++)
    	{
    	    if(a[j]>=a[i])
    		{
    			if(b[j]>t)
    			t=b[j];
    		}
    	}
    	if(t==0)
    	b[i]=1;
    	if(t>0)
    	b[i]=t+1;
    }
    for(i=0,t=0;i<n;i++)
    {
    	if(b[i]>t)
    	t=b[i];
    }
    printf("%d",t);
}
int n;
int a[MAXN];
int f[MAXN];

void input()
{
	cin >> n;
	for (int i = 0; i < n; i++)
		cin >> a[i];
}

int main()
{
	input();
	for (int i = 0; i < n; i++)
		f[i] = 1;
	for (int i = 1; i < n; i++)
	{
		for (int j = 0; j < i; j++)
			if (a[j] >= a[i] && f[j]+1 > f[i])
				f[i] = f[j]+1;
	}
	int ans = 0;
	for (int i = 0; i < n; i++)
		if (f[i] > ans)
			ans = f[i];
	cout << ans << endl;
}
int max=0,n=0;
int a[30],line=0,f[30]={0},b[30]={0};
void main()
{
	int k,i,n=0;
	
	void missile(int i,int k);
	scanf("%d",&k);
	for(i=0;i<k;i++)
	{
		scanf("%d",&a[i]);
		if(line<a[i])
			line=a[i];
	}
	missile(0,k);
	printf("%d",max);
}
void missile(int i,int k)
{
	int j;
	for(j=0;j<2;j++)
	{
		if(j==0&&i!=k-1)
		{
			missile(i+1,k);
		}
		else
		{
		    if(a[i]<=line||i==k-1)
			{
				if(a[i]<=line)
				{
				b[i]=line;
				line=a[i];
		        n++;
				f[i]=1;
				}
		        if(i==k-1)
				{
			        if(max<n)
				        max=n;
					printf("\n");
				}
		        else
		            missile(i+1,k);
				if(f[i]==1)
				{
				n--;
				line=b[i];
				f[i]=0;
				}
			}
		}
	}
}
int main()
{
	int k;
	scanf("%d",&k);
		int a[25],i;
	for(i=0;i<k;i++)
		scanf("%d",&a[i]);

	int b[25],j;
	b[k-1]=1;
	if(a[k-2]>=a[k-1])
		b[k-2]=2;
	else
		b[k-2]=1;
	int max;

	for(j=k-3;j>=0;j--)
	{
		max=0;
		for(i=j+1;i<=k-1;i++)
		{
			if(a[j]>=a[i] && b[i]>=max)
				max=b[i];
		}
		b[j]=max+1;
	}
	
	max=0;
	for(j=0;j<=k-1;j++)
	{
		if(b[j]>max)
			max=b[j];
	}
	printf("%d\n",max);
	
	return 0;
}
int main()
{
int i,j,n,max=0,maxb=0; 
scanf("%d",&n);
int  *a=(int*) malloc (n*sizeof(int)) ;
int  *b=(int*) calloc (n,sizeof(int)) ;

for (i=(n-1);i>=0;i--)
scanf("%d",&a[i]);
b[0]=1;

for (i=1;i<=(n-1);i++)
{
    max=0;
//printf("max=%d",max);
    for (j=0;j<=(i-1);j++)
    {
    if (     a[i]>=a[j]  &&  b[j]>max  )
       { 
   // printf("a[%d]>=a[j] is %d > %d",i,j,a[i],a[j]);
    max=b[j];
   //printf("max=%d",max);
       }
    }
    b[i]=max+1; 
   // printf("max=%d",max);
    //printf("b[%d]=%d\n",i,b[i]);  
}

for  (i=1;i<=(n-1);i++)
{
     if (  b[i]>  maxb)
     maxb  =  b[i];
}
printf("%d",maxb);
  
}