#include<iostream>#include<string.h>#include<map>#include<stdio.h>#include<algorithm>using namespace std;enum { SIZ = 1008,};struct Node{ int pro; int no; bool operator<(const Node&rhs) const { if(pro != rhs.pro) return pro < rhs.pro; return no < rhs.no; }};int num;int pos[SIZ];Node tre[SIZ];int val[SIZ], vp;int find(int v){ int low = 0, hi = vp; int mid; while(low < hi){ mid = (low+hi)/2; if(pos[val[mid]] < pos[v]){ low = mid + 1; } else { hi = mid; } } return low;}int fun(){ int i, t; vp = 0; for(i=0; i<num; i++){ t = tre[i].no; if(vp == 0 || pos[val[vp-1]] < pos[t]){ val[vp++] = t; } else { int v = find(t); val[v] = t; } } return vp;}int readIn(){ scanf("%d", &num); if(num <= 0) return 0; int i; for(i=0; i<num; i++){ scanf("%d", &tre[i].pro); tre[i].no = i; } sort(tre, tre+num); for(i=0; i<num; i++){ pos[tre[i].no] = i; } for(i=0; i<num; i++){ scanf("%d", &tre[i].pro); tre[i].no = i; } sort(tre, tre+num); return num;}int main(){ while(readIn() > 0){ printf("%dn", fun()); } return 0;}