Problem:
Search II

You are given a sequence of n integers S and a sequence of different q integers T. Write a program which outputs C, the number of integers in T which are also in the set S.

Input

In the first line n is given. In the second line, n integers are given. In the third line q is given. Then, in the fourth line, q integers are given.

Output

Print C in a line.

Constraints

Elements in S is sorted in ascending order

n ≤ 100000

q ≤ 50000

0 ≤ an element in S ≤ 109

0 ≤ an element in T ≤ 109

Sample Input 1

5
1 2 3 4 5
3
3 4 1

Sample Output 1

3

Sample Input 2

3
1 2 3
1
5

Sample Output 2

0

Sample Input 3

5
1 1 2 2 3
2
1 2

Sample Output 3

2

Notes

Solution in OCaml (judge verdict: Accepted)

let to_array s =
  Str.split (Str.regexp_string " ") s
  |> List.map int_of_string
  |> Array.of_list;;

let binary_search l value index =
  let rec loop left right =
    let mid = (left+right)/2 in
    if mid = left then
      if l.(left) = value then (true, left)
      else if l.(right) = value then (true, right)
      else (false, left)
    else
      let (left_new, right_new) =
        if l.(mid) > value then (left,mid-1)
        else if l.(mid) < value then (mid+1, right)
        else (-1,-1)
      in
      if left_new = -1 && right_new = -1 then (true, mid)
      else loop left_new right_new
  in loop index ((Array.length l)-1)
;;

let _ = read_int () and
    s = read_line () |> to_array and
    _ = read_int () and
    t = read_line () |> to_array  in
    Array.sort compare t;
    let f x y =
      let (count, index) = x in
      let (found, index_new) = binary_search s y index in
      if found then (count+1, index_new) else (count, index_new)
    in
    let (count, _) = Array.fold_left f (0,0) t in
    Printf.printf "%d\n" count
;;