semeru/Code-Code-CloneDetection-POJ104 huggingface dataset:
main()
{
         int a[L]={0},b[L]={0};
         int i,j,k,max,t;
         scanf("%d",&k);
         for(i=k;i>=1;i--)
         scanf("%d",&a[i]);
         b[1]=1;
         for(i=2;i<=k;i++)
         {
                 max=0;
                 for(j=1;j<i;j++)
                 {
                            if(a[j]<=a[i]&&b[j]>max)
                             {
                                       max=b[j];
                             }
                 }
                 b[i]=max+1;
         }
         t=0;
         for(i=1;i<=k;i++)
         {
                 if(b[i]>=t)
                 t=b[i];
         }
         for(i=1;i<=k;i++)
         {
                 if(b[i]==t)
                 printf("%d",b[i]);
         }
}
int main()
{
    int n,max=0;
    scanf("%d",&n);
    int d[100];
    int i=0,j=0;
    for(i=0;i<n;i++)
    {
        scanf("%d",&d[i]);                
    }
    int w[100];
    for(i=0;i<n;i++)
    w[i]=1;
    for(i=n-2;i>=0;i--)
    {
        for(j=i+1;j<n;j++)
            if(d[i]>=d[j]&&w[i]<=w[j])
                w[i]=w[j]+1;                           
    }
    for(i=0;i<n;i++)
    if(w[i]>=max)
    max=w[i];
    printf("%d",max);
    getchar();
    getchar();
    return 0;
}
int main()
{
	int k,y,h[25],g[25];
	scanf("%d",&k);
	for(int i=0;i<k;i++)
	{
            scanf("%d",&h[i]);
    }
     for(int a=0;a<k;a++)
     g[a]=1;
    for(int j=k-2;j>=0;j--)
    {
            y=0;
            for(int i=j+1;i<k;i++)
            { 
                    	if(h[i]<=h[j])
		              	{
			            	if(y<g[i])
			            	y=g[i];
		            	}
            }
            g[j]=g[j]+y;
    }
    int d=g[0];
    for(int i=0;i<k-1;i++)
    {
            if(d<g[i])
            d=g[i];
    }
    printf("%d",d);
    getchar();
    getchar();
     getchar();
    getchar();
}
int main ()
{
	int n,a[25],b[25];
	scanf("%d",&n);
	for (int i=0;i<n;i++)
		scanf("%d",&a[i]);
	for (int i=0;i<n;i++)
		b[i]=1;
	for(int i=n-2;i>=0;i--) 
    {
		for(int j=i+1;j<n;j++) 
        	if((a[j]<=a[i])&&(b[i]<b[j]+1))
            b[i]=b[j]+1; 
    } 
    int max=b[0];
    for (int i=0;i<n;i++)
    {
    if (b[i]>max)
    max=(b[i]);
	}
	printf("%d",max);
	return 0;
}
int k,i,j,n=0,t;
int a[25],b[25];
main()
{	
	cin>>k;
	for(i=0;i<k;i++) cin>>a[i];
	for(i=0;i<k;i++)
	{
		for(j=0;j<i;j++)
		{
			if(a[j]>=a[i]) 
			{
				t=b[j]+1;
				if(t>b[i]) b[i]=t;
				}			
			}
		}
	for(i=0;i<k;i++) if(b[i]>n) n=b[i];
	cout<<n+1;

	}
int k = 0;
int a[100];
int dp[100];

int solve()
{
	int ans = 0;

	dp[0] = 1;
	for(int i=1; i<k; i++)
	{
		dp[i] = 1;
		for(int j=0; j<i; j++)
		{
			if(a[j] >= a[i] && dp[j] + 1 > dp[i])
			{
				dp[i] = dp[j] + 1;
			}
		}
		if(dp[i] > ans)
		{
			ans = dp[i];
		}
	}

	return ans;
}

int main()
{
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);

	scanf("%d", &k);

	for(int i=0; i<k; i++)
	{
		scanf("%d", &a[i]);
	}
	printf("%d\n", solve());

	return 0;
}
int h[25],n;
int hack(int i,int w){
 if(i==n-1){
  if(h[i]<=w) return 1;
  else return 0;
 }
 int b=hack(i+1,w),c=0;
 if(h[i]<=w)
   c=1+hack(i+1,h[i]);
 if(b>c) return b;
 else return c;   
}
int main(){
 scanf("%d",&n);
 int i,max=0;
 for(i=0;i<n;i++){
  scanf("%d",&h[i]);
  if(h[i]>max)
   max=h[i];
 }
 printf("%d",hack(0,max));
 return 0;
}
/*
 * lanjiedaodan.cpp
 *
 *  Created on: 2010-9-29
 *      Author: lz
 */

int main()
{
	int k;
	cin>>k;
	int a[k];
	int num[k];
	int i;
	int j;
	for(i=0;i<k;i++)
		{
		cin>>a[i];
		num[i]=1;
		}
for(i=0;i<k;i++)
	for(j=0;j<i;j++)
		if(a[j]>=a[i])
			if(num[i]<num[j]+1)
				num[i]=num[j]+1;
int max=1;
for(i=0;i<k;i++)
	if(num[i]>max)
		max=num[i];
cout<<max;
return 0;

}
const long maxn=25;

long n;
long a[maxn+10];

long ans;

void dfs(long h,long maxH,long now){
    long i;
    if(h==n+1){
	if(now>ans)ans=now;
	return;
    }
    dfs(h+1,maxH,now);
    if(a[h]<=maxH)dfs(h+1,a[h],now+1);
}

main(){
    long i;    
    scanf("%ld",&n);
    for(i=1;i<=n;i++){
	scanf("%ld",a+i);
    }
    dfs(1,1<<30,0);
    printf("%ld\n",ans);
    //getchar();getchar();
    return 0;
}
unsigned int h[26],n;
int go(int maxh,int cp)
{
	int x,y,max;
	while(h[cp]>maxh)cp=cp+1;
	if(h[cp]==0)return 0;
	x=go(maxh,cp+1);
	maxh=h[cp];
	y=1+go(maxh,cp+1);
	max=(x>y)?x:y;
	return max;
}
int main()
{
	unsigned int i,c,t;
	scanf("%d",&n);
	for(i=0;i<n;i++)scanf("%d",&h[i]);
	h[n]=0;
	t=go(65535,0);
	printf("%d",t);
	return 0;
}
main() 
{ int b[26],h[26],k,i,j,t=0; 
  scanf("%d",&k); 
  for(i=1;i<=k;i++) 
  scanf("%d",&h[i]);
  for(i=1;i<=k;i++) 
  {
                    for(j=1,t=0;j<i;j++) 
                    {
                                         if(h[j]>=h[i]) 
                                         {if(b[j]>t) 
                                          t=b[j];}
                                          } 
                    if(t==0) b[i]=1; 
                    else b[i]=t+1;} 
  for(i=1,t=0;i<=k;i++) 
  {
                        if(b[i]>t) 
                        t=b[i];
                        } 
  printf("%d",t); 
  getchar();
  getchar();
}
int numbers[1001],maxLength[1001];
int n,max = 0, temp = 0, check = 0;
int j;

int main()
{
	cin>>n;
	for (int i = n-1; i >= 0; i--)
		cin>>numbers[i];
	maxLength[0] = 1;
	for (int i = 1; i < n; i++)
	{
		temp = 0; check = 0;
		for (j = 0, maxLength[i] = 0; j < i; j++)
		{// <= !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
			if ( numbers[j] <= numbers[i] && maxLength[j] >= maxLength[i] && maxLength[j] >= maxLength[temp])
			{
				temp = j;
				check++;
			}
		}
		if (check) maxLength[i] = maxLength[temp]+1;
		else maxLength[i] = 1;
	}
	for (int i = 0; i < n; i++)
		if (max < maxLength[i]) max = maxLength[i];
	cout<<max;
	return 0;
}
int main()
{
	int n; 
	cin>>n;
	int a[25];
	int rem[25] = {1};
	for(int i = 0; i < n; i++)
		cin>>a[i];
	int MMax = 0;
	for(int i = 1; i < n; i++)
	{
		int max = 0;
		for(int j = i-1; j >= 0; j--)
		{
			if(j < max) break;
			if(a[j] >= a[i] && rem[j] > max) max = rem[j];
		}
		rem[i] = max + 1;
		if(rem[i] > MMax) MMax = rem[i];
	}
	cout<<MMax<<endl;
	return 0;
}
int compare(const void *a,const void *b)
{
    return (*(int*)b-*(int*)a);
}
int main()
{
    int k,i,j,m=0;
    scanf("%d",&k);
    int a[30]={0};
    for(i=0;i<k;i++)
    {
    scanf("%d",&a[i]);
    }
    int b[30]={1};
    int t;
    int c[30];
    for(i=1;i<k;i++)
    {
                 t=0;
              for(j=0;j<30;j++)
              {
                               c[j]=0;
              }
              for(j=i-1;j>=0;j--)
              {
                               if(a[j]>=a[i])
                               {
                                       c[t]=b[j];
                                       t++;
                               }
              }
              qsort(c,t,sizeof(int),compare);
              b[i]=c[0]+1;
    }
    for(i=0;i<k;i++)
    {
                    if(m<b[i])
                    m=b[i];
    }
    printf("%d\n",m);
    getchar();
    getchar();
    getchar();
}
int H[100];
int N;

int memo[40][40];

int dp(int i, int k) { // from i, max H[k]
	int rslt;
	if(i == N) return 0;
	if(memo[i][k] != -1) return memo[i][k];
	if(k != 30 && H[i] > H[k]) rslt = dp(i + 1, k);
	else {
		int a = dp(i + 1, i) + 1;
		int b = dp(i + 1, k);
		if(a > b) rslt = a; else rslt = b;
	}
	return memo[i][k] = rslt;
}

int main() {
	scanf("%d", &N);
	for(int i = 0; i < 40; i++) for(int j = 0; j < 40; j++)
		memo[i][j] = -1;
	for(int i = 0; i < N; i++) {
		scanf("%d", &H[i]);
	}
	printf("%d\n", dp(0, 30));
}
void main ()
{
int a[27],b[27],n,i,j,k;
scanf ("%d",&k);
for (i=1;i<=k;i++)
  scanf ("%d",&a[i]);
for (i=1;i<=k+1;i++)
  b[i]=0;
for (i=k;i>=1;i--)
 {
  for (j=i+1;j<=k+1;j++)
   {
    if (a[i]>=a[j]&&b[j]>=b[i])
      b[i]=b[j]+1;
    }
  }
n=0;
for (i=1;i<=k;i++)
  {
   if (b[i]>n)
   n=b[i];
  }
if (k==25)
printf ("%d\n",n+1);
else printf ("%d\n",n); 
}
int n;
int d[100];
int dp[30];

int main()
{
    while(scanf("%d", &n) == 1)
    {
        for(int i = 1; i <= n; i++)
            scanf("%d", d + i);    
        
        d[0] = (-1u)>>1;
        for(int i = 1; i <= n; i++)
        {
            dp[i] = 0;
            for(int j = 0; j < i; j++)
                if(d[j] >= d[i]) 
                    dp[i] = max(dp[i], dp[j] + 1);   
        }
        
        int ans = 0;
        for(int i = 1; i <= n; i++)
            ans = max(ans, dp[i]);
            
        printf("%d\n", ans);
    }    
    return 0;    
}
main()
{
      int a[26],f[26];                        //f[i]????i+1????????????? 
      int i,j,k,n;
      scanf("%d",&n);
      for(i=0;i<n;i++)
      {
                      scanf("%d",&a[i]);
      }
      for(i=0;i<n;i++)
      {
                      f[i]=1;
      }
      for(i=1;i<n;i++)
      {
                      for(j=i-1;j>=0;j--)
                      {
                                        if(a[j]>=a[i]&&f[j]+1>f[i])
                                        f[i]=f[j]+1;
                      }
      }
      k=0;
      for(i=0;i<n;i++)
      {
                      if(f[i]>k)
                      k=f[i];
      }
      printf("%d",k);
      getchar();
      getchar();
      getchar();
}
int main ()
{
    int k,n,i,j;
    int max;
    int d[30];
    int h[30];
    d[0]=0;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&h[i]);
    h[0]=2147483647;
    for(i=1;i<=n;i++)
    {
        max=0;
        for(j=0;j<i;j++)
        {
            if(h[i]<=h[j]&&(d[j]+1)>max)
            max=d[j]+1;
        }
        d[i]=max;
    }
    max=0;
    for(i=1;i<=n;i++)
        if(d[i]>max)
            max=d[i];
    printf("%d\n",max);
    getchar();
    getchar();
    return 0;
}
int k, i, j, an[30];
int DFS (int h, int n)
{
	int t1, t2;
	if (n == k - 1)
	{
		if (an[n] > h)
			return 0;
		else
			return 1;
	}
	if (an[n] > h)
		return DFS (h, n + 1);
	else
	{
		t1 = DFS (h, n + 1);
		t2 = DFS (an[n], n + 1) + 1;
		if (t1 > t2)
			return t1;
		else
			return t2;
	}
}
int main ()
{
	cin >> k;
	for (i = 0; i < k ;i ++)
	{
		cin >> an[i];
	}
	cout << DFS(INT_MAX, 0) << endl;
	return 0;
}
int main()
{
	int n;
	cin>>n;
	int s[25];
	int max[25];
	int i,j;
	for(i=0;i<n;i++)
	{
		cin>>s[i];
	}
	max[0]=1;
	for(i=1;i<n;i++)
	{
		int m = 1;
		for(j=0;j<i;j++)
		{
			if(s[i]<=s[j]&&max[j]+1>m)
				m = max[j]+1;
		}
		max[i]=m;
	}
	int p=max[0];
	for(i=1;i<n;i++)
	{
		if(max[i]>p)
			p=max[i];
	}
	cout<<p<<endl;
}
int N;
	int a[26]={2100000000};
void main()
{

	int f(int x);
	int i;
	scanf("%d",&N);
	for(i=1;i<=N;i++)
		scanf("%d",&a[i]);

     printf("%d",f(0)-1);
}
int f(int x)
{
	int i;
	int p;
	int y=0;
	for(i=x+1;i<=N;i++)
	{
		if(a[i]<=a[x])
		{
			p=f(i);
			y=(y>=p?y:p);
		}
	}
	return (y+1);
}
char f(int max,int a[],char m, char n)
{
	char num1,num2;
	if(m==n&&a[n-1]<=max)
		return(1);
	else if(m==n&&a[n-1]>max)
		return(0);
	else 
	{
		if(a[m-1]<=max)
		{
			num1=f(max,a,m+1,n);
			num2=f(a[m-1],a,m+1,n)+1;
			if(num1>num2)
				return(num1);
			else
				return(num2);
		}
		else
			return(f(max,a,m+1,n));
	}
	
}


void main()
{
	int hmax=(unsigned)(~0)>>1;
	int h[N];
	char n,i;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&h[i]);
	printf("%d\n",f(hmax,h,1,n));
	printf("input:\n");
	for(i=0;i<n;i++)
		printf("%d,",h[i]);
	

}
main()
{
    int a,i,j,k;
    scanf("%d",&a);
    int b[a],c[a],d[25];
   for(i=0;i<=a-1;i++)
       scanf("%d",&b[a-1-i]);
    c[0]=1;
    for(i=1;i<=a-1;i++)
       {
          for(k=0;k<=24;k++)
              d[k]=0;
          for(j=i-1;j>=0;j--)
            { if(b[i]>=b[j])
                d[j]=c[j]+1;
              if(b[i]<b[j]&&j==0)
                d[j]=1;
            }
          for(k=0;k<=23;k++)
            if(d[k]>d[k+1])
              {
                int n=d[k];
                d[k]=d[k+1];
                d[k+1]=n;
              }
          c[i]=d[24];             
       }
    for(i=0;i<=a-2;i++)
       if(c[i]>c[i+1])
         {
           int n=c[i];
           c[i]=c[i+1];
           c[i+1]=n;
         }
    printf ("%d",c[a-1]);
}
int main()
{
	int i,j,k,n,m,height[25],len[25],num[25];
	cin>>n;
	for(i=0;i<n;i++)
		cin>>height[i];
	for(i=0;i<n;i++)
		len[i]=0;
	for(i=n-1;i>=0;i--)
	{
		m=0;
		for(j=i+1;j<=n-1;j++)
			if(height[j]<=height[i])
			{
				num[m]=j;
				m++;
			}
		for(k=0;k<=m-1;k++)
			if(len[i]<len[num[k]])
				len[i]=len[num[k]];
			len[i]++;
	}
	m=0;
	for(i=0;i<n;i++)
		if(len[i]>m)
			m=len[i];
		cout<<m<<endl;
return 0;
}
const int maxn = 55; 
int a[maxn], dp[maxn][maxn]; 

int main()
{
    int T, n, i, j, ans; 
    while (scanf ("%d", &n)!=EOF)
    {
          for (i=1; i<=n; i++)scanf ("%d", a+i); 
          memset (dp, -1, sizeof(dp)); 
          for (i=1; i<=n; i++) dp[i][i] = 1; 
          for (i=1; i<n; i++)
          {
              for (j=1; j<=i;j++)
              {
                  dp[i+1][j] = max(dp[i+1][j], dp[i][j]); 
                  if (a[i+1]<=a[j])
                     dp[i+1][i+1] = max(dp[i+1][i+1], dp[i][j]+1);     
              }    
          }
          ans = 0; 
          for (i=n, j=1;j<=i;j++) ans = max(ans, dp[i][j]); 
          printf ("%d\n", ans); 
    }
    return 0; 
}
int k;
int a[25]={0};
int b[25]={0};

int main()
{
	cin>>k;
	int i,j;
	for(i=0;i<k;i++)
		cin>>a[i];
	int n=0;
	for (j=0;j<k;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;
		}
	}
	for (i=0;i<k;i++) 
		if (n<=b[i]) 	
			n=b[i];
	cout<<n<<endl;	
	return 0;
}
void main()
{
	int n,j,k,a[25],i,c,b[25],t;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=1;
	}

	for(j=n-2;j>=0;j--)
	{
		t=0;
		for(k=j+1;k<n;k++)
		{		
			if(a[k]<=a[j]&&b[k]>t)
			{
				t=b[k];						
			}		
		}
		b[j]=b[j]+t;
	
	}
	c=b[0];
	for(i=1;i<n;i++)
	{
		if(b[i]>c)
		{
			c=b[i];
		}
	}

	printf("%d",c);


}
main()
{
	int dao,a[25]={0},b[25],i,j,num;
	scanf("%d",&dao);
	for(i=0;i<dao;i++)
	{
		scanf("%d",&b[i]);
	}
    for(i=dao-1;i>=0;i--)
	{
		num=0;
		for(j=i;j<dao;j++)
		{
			if(b[i]>=b[j]&&num<=a[j])num=a[j];
		}
		a[i]=num+1;
	}
	num=a[0];
	for(i=1;i<dao;i++)
	{
		if(a[i]>=num)num=a[i];
	}
	printf("%d",num);
}
main()
{
      int n;
      scanf("%d",&n);
      int a[n];
      int i,j,max=0;
      for(i=0;i<n;i++)
         scanf("%d",&a[i]);
      int b[n];
      for(i=0;i<n;i++)
        b[i]=1;
      b[n-1]=1;
      for(i=n-2;i>=0;i--)
      {
            for(j=i+1;j<n;j++)
            {
               if(a[j]<=a[i]&&b[j]+1>=b[i])
               b[i]=b[j]+1;                  
            }                   
      }
      for(i=0;i<n;i++)
      {
          if(b[i]>max)
          max=b[i];                
      }
      printf("%d",max);  
}
int height[26];

int cal(int N,int M){//N&#206;a&#191;aê&#188;±è&#189;&#207;?&#196;êy?&#196;&#206;&#187;&#214;&#195;?&#172;M&#206;aê?&#207;&#194;?&#196;êy?&#196;&#184;&#246;êy?&#172;N+M=×ü?&#196;êy&#184;&#246;êy 
	int i,max,sub;
	max=0;
	if(M==0){
		return 1;
	}
	for(i=N+1;i<=N+M;i++){
		if(height[N]>=height[i]){
			sub=cal(i,N+M-i);
			if(sub>=max){
				max=sub;
			}
		}
	} 
	return max+1;
}

int main()
{
	int k,i;
	scanf("%d\n",&k);
	height[0]=10000000; 
	scanf("%d",&height[1]);
	for(i=1;i<=k-1;i++){
		scanf(" %d",&height[i+1]);
	}
	
	printf("%d",cal(0,k+1)-2);
	
	return 0;
 }
void main()
{
	int n,i,j,max=1;
	int a[25];
	int b[25];
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=1;
	}

	for(i=1;i<n;i++)
		for(j=0;j<i;j++)
		{
			if(a[i]<=a[j]&&b[i]<b[j]+1)
			{
				b[i]=b[j]+1;
				if(b[i]>max)
					max=b[i];
			}
		}

	printf("%d\n",max);
}
void main()
{int a[100],b[100],i,j,k=0,n;
scanf("%d",&n);
for(i=0;i<n;i++)
{scanf("%d",&a[i]);
b[i]=1;}
for(i=n-1;i>=0;i--)
{k=0;
for(j=n-1;j>i;j--)
{if(a[i]>=a[j]&&b[j]>k)
{k=b[j];
b[i]=b[j]+1;}
}
}
k=b[0];
for(i=0;i<n;i++)
{if(b[i]>k)
k=b[i];}
printf("%d",k);
}
int main()
{
	int a[NUM]={0},d[NUM]={0};
	int k,i,j;
	int max;
	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=k-1;j>i;j--){
			if(a[j]<=a[i]){
				if(d[j]>max) max=d[j];
			}
		}
		d[i]=max+1;
	}
	//?d[]????
	max=d[0];
	for(i=1;i<k;i++){
		if(d[i]>max) max=d[i];
	}
	printf("%d\n",max);
	return 0;
}
int rec[30],height[30];
int maxV;
int main()
{
 int n;
 maxV=0;
 cin>>n;
 if(n==0)
 {
     cout<<0<<endl;
     return 0;
 }
 int i,j;
 for(i=0;i<n;i++)
 {
     cin>>height[i];
     rec[i]=1;
     for(j=0;j<i;j++)
            if(height[j]>=height[i]&&rec[j]+1>rec[i])
                rec[i]=rec[j]+1;
        if(rec[i]>maxV)maxV=rec[i];
 }
 cout<<maxV<<endl;
 return 0;
}
void main()
{
	int num,h[27]={100000000},lj[27][27]={0};//lj[ex-turn][turn]
	int i,j,k,max;
	scanf("%d",&num);
	for(i=1;i<=num;i++)
		scanf("%d",&h[i]);
	for(i=num;i>=0;i--)//exturn
	{
		for(j=num;j>i;j--)//turn
		{
			if(h[i]>=h[j])
			{
				max=0;
				for(k=j;k<=num;k++)//???j?
					max=(max>lj[i][k])?max:lj[i][k];
				for(k=j;k<=num;k++)//???
					if(h[j]>=h[k])
						max=(max>lj[j][k]+1)?max:lj[j][k]+1;
				lj[i][j]=max;
			}
		}
	}
	printf("%d\n",lj[0][1]);		
}
main()
{
      int n,i,j,max,num=0;
      scanf("%d",&n);
      int a[n],b[n];
      for(i=0;i<n;i++)
      b[i]=0;
      for(i=0;i<n;i++)
      scanf("%d",&a[i]);
      b[n-1]=1;
      for(i=n-2;i>=0;i--)
      {max=b[i];
       for(j=i+1;j<n;j++)
       {if((a[i]>=a[j])&&(b[j]>=max))
        max=b[j];}
       b[i]=max+1;
       }
       for(i=0;i<n;i++)
       if(b[i]>num)
       num=b[i];
       printf("%d\n",num);

       }
int n;
int run()
{
        int i,j,a[33],b[33];
        for(i=1;i<=n;i++)
                scanf("%d",&a[i]);
        for(i=1;i<=n;i++)
                b[i]=1;
        for(i=1;i<=n;i++)
                for(j=i+1;j<=n;j++)
                        if(a[i]>=a[j])
                                if(b[j]<b[i]+1)
                                        b[j]=b[i]+1;
        j=0;
        for(i=1;i<=n;i++)
                if(b[i]>j)
                        j=b[i];
        printf("%d\n",j);
}
int main()
{
        scanf("%d",&n);
        while(n!=0)
        {
                run();
                n=0;
                scanf("%d",&n);
        }
        return 0;
}
int main(int argc, char* argv[])
{
	int a[25],b[25];
	int n,i,j;
	int max=1;
	scanf("%d",&n);
	for(i=0;i<n;i++)
	{
		scanf("%d",&a[i]);
		b[i]=1;
	}
	for(i=0;i<n;i++)
		for(j=0;j<i;j++)
			if((b[i]<=b[j])&&(a[i]<=a[j]))
			{
				b[i]=b[j]+1;
				if(b[i]>max)
					max=b[i];
			}
	printf("%d",max);
	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];
   for(int i=0;i<30;i++)
   s[i]=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]);
   getchar();
   getchar();
}
void main()
{
int a[30],b[30],i,j,k,n,m=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[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]<b[j]+1)
b[i]=b[j]+1;
}
if(b[i]>m)
m=b[i];
}
printf("%d",m);
}
main()
{
      int k;
      int i,j;
      int s[30],t[30];
      scanf("%d",&k);
      for(i=0;i<k;i++)
      {
                      scanf("%d",&s[i]);
                      t[i]=0;
      }
      for(i=k-1;i>=0;i--)
      {
                       for(j=i+1;j<k;j++)
                       {
                                         if(s[i]>=s[j]&&t[i]<t[j])
                                                     t[i]=t[j];
                       }
                       t[i]++;
      }
      for(i=0;i<k;i++)
      {
                      if(t[0]<t[i])
                         t[0]=t[i];
      }
      printf("%d",t[0]);
}
int num(int n, int *p)
{
	int i=1, max=0;
	int *q=p+1;
	if(n==2)
	{
		if(*p>=*q)
			return 2;
		else
			return 1;
	}
	else
	{
		while(i<=n)
		{
			for(; *p<*q && i<=n; i++, q++);
			i++;
			if(num(n-i+1, q)+1>max)
				max=num(n-i+1, q)+1;
			q++;
		}
	}
	return max;
}
int main()
{
	int k, i, a[25], max=0;
	scanf("%d", &k);
	for(i=0; i<k; i++)
		scanf("%d", &a[i]);
	for(i=k; i>=2; i--)
	{
		if(num(i, a+k-i)>max)
			max=num(i, a+k-i);
	}
	printf("%d\n", max);
	return 0;
}
int main()
{
    int k,n,i,j,e,s,r,t;
    int a[300],b[300];
    scanf("%d",&k);
        s=1;
        r=1;
        for(i=0;i<k;i++)
        {
            scanf("%d",&a[i]);
            b[i]=i;
        }
        for(i=0;i<k-1;i++)
        {
            for(j=i+1;j<k;j++)
            {
                if(a[i]<a[j])
                {
                   e=a[i];
                   a[i]=a[j];
                   a[j]=e;
                   e=b[i];
                   b[i]=b[j];
                   b[j]=e;
                }

            }
        }

        for(i=0;i<k;i++)
        {

            n=b[i];
            r=1;
            for(j=i+1;j<k;j++)
            {
                if(b[j]>n)
                {
                    r++;
                    n=b[j];
                }
            }
            if(r>s)
            {
                s=r;
                t=i;
            }
        }
        if(k==25){s=s+2;};


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

				b[i]=b[j]+1;
				
			}
		}
	}
	int max=1;
	for(i=0;i<n;i++)
	{
		if(b[i]>max)
			max=b[i];
	}
	cout<<max<<endl;

	return 0;
}
int com(void const *a,void const *b)
{
    return (*(int *)a-*(int *)b);
}
main()
{
      int k,H;
      int j,count[25],n;
      scanf("%d",&k);
      int h[25],i;
      for (i=0;i<k;i++)
      {
          scanf("%d",&h[i]);
      }
      count[k-1]=1;
      for (i=k-2;i>=0;i--)
      {
          n=0;
          for (j=k-1;j>=i+1;j--)
          {
             if  (h[j]<=h[i])
             {
                  if (count[j]>=n)
                  {
                       n=count[j];
                  }
             }
          }
          count[i]=n+1;
      }

           qsort(count,k,sizeof(int),com);
           printf("%d",count[k-1]);
      getchar();getchar();getchar();getchar();getchar();getchar();
}
int main()
{
	int n=0;
	int h[25];
	cin>>n;
	int i=0;
	for(i=n-1;i>=0;i--)
	{
		cin>>h[i];
	}
	int d[25];
	d[0]=1;
	int j=0;
	int max=0;
	for(i=1;i<n;i++)
	{
		max=0;
		for(j=0;j<i;j++)
		{
			if(max<d[j]&&h[i]>=h[j])
			{
				max=d[j];
			}
		}
		d[i]=max+1;
	}
	max=0;
	for(i=0;i<n;i++)
	{
		if(d[i]>max)
			max=d[i];
	}
	cout<<max<<endl;
	return 0;
}
int N,height[25];
int main(void)
{
	int i;
	int work(int,int);
	cin >> N;
	for (i = 0 ; i < N ; i++) cin >>height[i];
	cout << work(0,99999) <<endl;
	return 0;
}
int work(int sub,int high)
{
	int i,max,num1,num2;
	for ( i = sub ; high < height[i] ; i++);
	if (sub >= N || i >= N) return 0;
	num1 = work(i+1,height[i]) + 1;
	num2 = work(sub+1,high);
	return num1 > num2 ? num1 : num2;
}//HONZE TEST
void main()
{
	int i,j,k,t;
	int *p,*max;
	scanf("%d",&k);
	p=(int *)malloc(k*sizeof(int));
	max=(int *)malloc(k*sizeof(int));
	for (i=0;i<=k-1;i++) scanf("%d",p+i);

	for (i=0;i<=k-1;i++)
	{
		t=0;
		for (j=0;j<i;j++)
			if ( *(p+j) >= *(p+i) ) 
				if ( t < *(max+j) ) t=*(max+j);
		*(max+i)=t+1;
	}
	
	t=0;
	for (i=0;i<=k-1;i++) if (*(max+i)>t) t=*(max+i);
	printf("%d",t);

}
const int maxk = 300;

int main()	{
	int k;
	int a[maxk];
	int f[maxk];

	cin >> k;
	for (int i = 0; i < k; i ++)	cin >> a[i];

	int ans = 0;

	f[0] = 1;

	for (int i = 1; i < k; 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;
		};
		if (f[i] > ans)	ans = f[i];
	};

	cout << ans << endl;

	return 0;
};
int max(int x,int y)
{
    if(x>y) return x;
    else return y;
}
int dao[26],n;
int fly(int high,int m)
{
    if(m==n)         return 0;
    else
    {
    if(high<dao[m])  return fly(high,m+1);
    else
    {
        return max(fly(high,m+1),fly(dao[m],m+1)+1);
    }
    }    
}
int main()
{
   int i,j,k;
   scanf("%d",&n);
   for(i=0;i<n;i++)  scanf("%d",&dao[i]);
   k=fly(99999,0);
   printf("%d",k);
  }