{ NOTE: it is recommended to use this even if you don't understand the following code. }
{ constraints }
const
MAXN = 100000;
{ input data }
var
N, i, temp : longint;
A : array[0..MAXN-1] of longint;
T : array[1..MAXN] of longint;
ft : array[1..MAXN] of longint;
best : array[1..MAXN] of longint;
procedure update(i: longint; v: longint);
begin
i := N-i+1;
while (i <= N) do
begin
if v > ft[i] then
ft[i] := v;
i := i + (i and (-i));
end;
end;
function get(i:longint) : longint;
var res: longint;
begin
res := 0;
i := N-i+1;
while (i > 0) do
begin
if res < ft[i] then
res := ft[i];
i := i - (i and (-i));
end;
get := res;
end;
begin
{
uncomment the following lines if you want to read/write from files
assign(input, 'input.txt'); reset(input);
assign(output, 'output.txt'); rewrite(output);
}
readln(N);
for i:=0 to N-1 do
read(A[i]);
readln();
for i:=1 to N do
read(T[i]);
readln();
{
WARNING! T is indexed from 1!
In particular T[i] is the preferred number of i.
}
for i:=1 to N do
begin
best[i] := 0;
ft[i] := 0;
end;
i := N-1;
while i >= 0 do
begin
if best[T[A[i]]]+1 > best[A[i]] then
best[A[i]] := best[T[A[i]]]+1;
temp := get(A[i]+1)+1; writeln(temp,' ', A[i],' ',i);
if temp > best[A[i]] then
best[A[i]] := temp;
update(A[i], best[A[i]]);
i := i-1;
end;
{ insert your code here }
writeln(get(1)); { print result }
end.
eyBOT1RFOiBpdCBpcyByZWNvbW1lbmRlZCB0byB1c2UgdGhpcyBldmVuIGlmIHlvdSBkb24ndCB1bmRlcnN0YW5kIHRoZSBmb2xsb3dpbmcgY29kZS4gfQoKeyBjb25zdHJhaW50cyB9CmNvbnN0CiAgICBNQVhOID0gMTAwMDAwOwoKeyBpbnB1dCBkYXRhIH0KdmFyCiAgICBOLCBpLCB0ZW1wIDogbG9uZ2ludDsKICAgIEEgICAgIDogYXJyYXlbMC4uTUFYTi0xXSBvZiBsb25naW50OwogICAgVCAgICAgOiBhcnJheVsxLi5NQVhOXSBvZiBsb25naW50OwogICAgZnQgICAgOiBhcnJheVsxLi5NQVhOXSBvZiBsb25naW50OwogICAgYmVzdCAgICA6IGFycmF5WzEuLk1BWE5dIG9mIGxvbmdpbnQ7Cgpwcm9jZWR1cmUgdXBkYXRlKGk6IGxvbmdpbnQ7IHY6IGxvbmdpbnQpOwpiZWdpbgogICAgaSA6PSBOLWkrMTsKICAgIHdoaWxlIChpIDw9IE4pIGRvCiAgICBiZWdpbgogICAgICAgIGlmIHYgPiBmdFtpXSB0aGVuCiAgICAgICAgICAgIGZ0W2ldIDo9IHY7CiAgICAgICAgaSA6PSBpICsgKGkgYW5kICgtaSkpOwogICAgZW5kOwplbmQ7CgpmdW5jdGlvbiBnZXQoaTpsb25naW50KSA6IGxvbmdpbnQ7CnZhciByZXM6IGxvbmdpbnQ7CmJlZ2luCiAgICByZXMgOj0gMDsKICAgIGkgOj0gTi1pKzE7CiAgICB3aGlsZSAoaSA+IDApIGRvCiAgICBiZWdpbgogICAgICAgIGlmIHJlcyA8IGZ0W2ldIHRoZW4KICAgICAgICAgICAgcmVzIDo9IGZ0W2ldOwogICAgICAgIGkgOj0gaSAtIChpIGFuZCAoLWkpKTsKICAgIGVuZDsKICAgIGdldCA6PSByZXM7CmVuZDsKCgpiZWdpbgp7CiAgICB1bmNvbW1lbnQgdGhlIGZvbGxvd2luZyBsaW5lcyBpZiB5b3Ugd2FudCB0byByZWFkL3dyaXRlIGZyb20gZmlsZXMKICAgIGFzc2lnbihpbnB1dCwgICdpbnB1dC50eHQnKTsgIHJlc2V0KGlucHV0KTsKICAgIGFzc2lnbihvdXRwdXQsICdvdXRwdXQudHh0Jyk7IHJld3JpdGUob3V0cHV0KTsKfQoKICAgIHJlYWRsbihOKTsKICAgIGZvciBpOj0wIHRvIE4tMSBkbwogICAgICAgIHJlYWQoQVtpXSk7CiAgICByZWFkbG4oKTsKICAgIGZvciBpOj0xIHRvIE4gZG8KICAgICAgICByZWFkKFRbaV0pOwogICAgcmVhZGxuKCk7CgogICAgewogICAgICAgIFdBUk5JTkchIFQgaXMgaW5kZXhlZCBmcm9tIDEhCiAgICAgICAgSW4gcGFydGljdWxhciBUW2ldIGlzIHRoZSBwcmVmZXJyZWQgbnVtYmVyIG9mIGkuCiAgICB9CgogICAgZm9yIGk6PTEgdG8gTiBkbwogICAgYmVnaW4KICAgICAgICBiZXN0W2ldIDo9IDA7CiAgICAgICAgZnRbaV0gOj0gMDsKICAgIGVuZDsKCiAgICBpIDo9IE4tMTsKICAgIHdoaWxlIGkgPj0gMCBkbwogICAgYmVnaW4KICAgICAgICBpZiBiZXN0W1RbQVtpXV1dKzEgPiBiZXN0W0FbaV1dIHRoZW4KICAgICAgICAgICAgYmVzdFtBW2ldXSA6PSBiZXN0W1RbQVtpXV1dKzE7CiAgICAgICAgdGVtcCA6PSBnZXQoQVtpXSsxKSsxOyB3cml0ZWxuKHRlbXAsJyAnLCBBW2ldLCcgJyxpKTsKICAgICAgICBpZiB0ZW1wID4gYmVzdFtBW2ldXSB0aGVuCiAgICAgICAgICAgIGJlc3RbQVtpXV0gOj0gdGVtcDsKICAgICAgICB1cGRhdGUoQVtpXSwgYmVzdFtBW2ldXSk7CiAgICAgICAgaSA6PSBpLTE7CiAgICBlbmQ7CgoKCiAgICB7IGluc2VydCB5b3VyIGNvZGUgaGVyZSB9CgogICAgd3JpdGVsbihnZXQoMSkpOyB7IHByaW50IHJlc3VsdCB9CmVuZC4K