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 Rust (judge verdict: Accepted)

fn main() {
  let mut n = String::new();
  std::io::stdin().read_line(&mut n).unwrap();
  let n: i32 = n.trim().parse().unwrap();

  let mut v = String::new();
  std::io::stdin().read_line(&mut v).unwrap();
  let v: Vec<i32> = v.trim().split_whitespace().map(|x| x.parse().unwrap()).collect();

  let mut q = String::new();
  std::io::stdin().read_line(&mut q).unwrap();
  let _q:i32 = q.trim().parse().unwrap();

  let mut queries = String::new();
  std::io::stdin().read_line(&mut queries).unwrap();
  let queries: Vec<i32> = queries.trim().split_whitespace().map(|x| x.parse().unwrap()).collect();

  let mut ans = 0;
  for x in queries.iter() {
    let mut low: i32 = -1;
    let mut hi: i32 = n;
    while 1 < hi - low {
      let mid = (low + hi) / 2;
      if x <= &v[mid as usize] {
        hi = mid;
      } else {
        low = mid
      }
    }
    ans += if hi < n && &v[hi as usize] == x { 1 } else { 0 };
  }
  println!("{}", ans);
}