#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define For(a,b) for(int a=0;a<b;a++)
#define mem(x) memset(x,0,sizeof(x))
#define Debug(x) cout<<"---> "<<x<<endl;
#define sf scanf
#define pf printf
#define maxn 30010
int gcd(int a,int b){ return b>0?gcd(b,a%b):a;}
typedef long long ll;
typedef pair<int ,int > P;
int n,A[maxn],dp[maxn],res=0;
int main(){
cin>>n;
For(i,n) cin>>A[i];
for(int i=0;i<n;i++){
dp[i]=1;
for(int j=0;j<i;j++){
if(A[i]>A[j]){
dp[i]=max(dp[i],dp[j]+1);
}
}
res=max(res,dp[i]);
}
cout<<res<<endl;
return 0;
}
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define For(a,b) for(int a=0;a<b;a++)
#define mem(x) memset(x,0,sizeof(x))
#define Debug(x) cout<<"---> "<<x<<endl;
#define sf scanf
#define pf printf
#define maxn 3010
int gcd(int a,int b){ return b>0?gcd(b,a%b):a;}
typedef long long ll;
typedef pair<int ,int > P;
char s1[maxn],s2[maxn];
int dp[maxn][maxn];
int main(){
cin>>s1>>s2;
int len1=strlen(s1),len2=strlen(s2);
for(int i=0;i<len1;i++){
for(int j=0;j<len2;j++){
if(s1[i]==s2[j]){
dp[i+1][j+1]=dp[i][j]+1;
}
else{
dp[i+1][j+1]=max(dp[i+1][j],dp[i][j+1]);
}
}
}
cout<<dp[len1][len2]<<endl;
return 0;
}