#include<cstdio>
#include<cstring>
#define M 21
int a[M],b[M],n,t;
bool count(){
int i=1;
while(i<=n && ~scanf("%d",&t)){
b[t]=i;i++;
}
if(i==n+1)
return true;
else
return false;
}
void DynamicP(){
int dp[M][M]={0};
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i]==b[j])
dp[i][j]=dp[i-1][j-1]+1;
else
dp[i][j]=dp[i-1][j]>dp[i][j-1]?dp[i-1][j]:dp[i][j-1];
}
}
printf("%d\n",dp[n][n]);
}
int main(){
while( ~scanf("%d",&n) ){
int i,j;
for(i=1;i<=n;i++)
scanf("%d",&t),a[t]=i;
while(count())
DynamicP();
}
return 0;
}