#include<iostream>
using namespace std;
//method1
/*
利用动态规划来求解。
假设目标数组array[]的前i个元素中,最长递增子序列的长度为LIS[i].那么,
LIS[i]=max{1,LIS[k]+1},array[i+1]>array[k],for any k<=i
时间复杂度为O(N^2)
*/
int findLongest(int* A,int N)
{
    int* LIS=new int[N];
    int max=0;
    for(int i=0;i<N;i++)LIS[i]=1;
       for(int i=0;i<N;i++)
    for(int j=0;j<i;j++)
    {
     if(A[i]>A[j] && LIS[j]+1>LIS[i])
      {
           LIS[i]=LIS[j]+1;
      }
    }
   
     for(int i=0;i<N;i++)
  {
    if(LIS[i]>max)max=LIS[i];
  }
  delete [] LIS;
  return max;
}
int main()
{
     int N;
  int* A;
  while(cin>>N,N)
  {
      A=new int[N];
  
   for(int i=0;i<N;i++)cin>>A[i];
         int max=findLongest(A,N);
      cout<<"数组中最长递增子序列长度为:"<<max<<endl;
  }
  delete [] A;
  system("pause");
  return 0;
}