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)

#[allow(unused_imports)]
use std::cmp::{max, min};
use std::io::{stdin, stdout, BufWriter, Write};

#[derive(Default)]
struct Scanner {
    buffer: Vec<String>,
}

impl Scanner {
    fn next<T: std::str::FromStr>(&mut self) -> T {
        loop {
            if let Some(token) = self.buffer.pop() {
                return token.parse().ok().expect("Failed parse");
            }
            let mut input = String::new();
            stdin().read_line(&mut input).expect("Failed read");
            self.buffer = input.split_whitespace().rev().map(String::from).collect();
        }
    }
}

fn bsearch(x: i32, s: &[i32]) -> bool {
    if s.len() == 1 {
        if x == s[0] {
            return true;
        }
        return false;
    }

    let m = s.len()/2;
    if x < s[m] {
        bsearch(x, &s[..m])
    } else {
        bsearch(x, &s[m..])
    }
}


fn main() {
    let mut scan = Scanner::default();
    let out = &mut BufWriter::new(stdout());
    let n = scan.next();
    let mut s = vec![0; n];
    for i in 0..n {
        s[i] = scan.next();
    }
    let q = scan.next();
    let mut t = vec![0; n];
    for i in 0..q {
        t[i] = scan.next()
    }

    s.sort();
    let mut res = 0;
    for i in 0..q {
        if bsearch(t[i], &s) {
            res += 1;
        }
    }
    writeln!(out, "{}", res).ok();
}