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

import java.util.Scanner;

public class Main {

    public static void main(String... args) {
        Scanner sc = new Scanner(System.in);{
            int arr1Size = sc.nextInt();
            int[] arr1 = new int[arr1Size];
            for(int i = 0; i < arr1Size; ++i)
                arr1[i] = sc.nextInt();

            int arr2Size = sc.nextInt();
            int[] arr2 = new int[arr2Size];
            for(int i = 0; i < arr2Size; ++i)
                arr2[i] = sc.nextInt();

            int count = 0;
            for(int n : arr2)
                count += bs(arr1, n);

            System.out.println(count);
        }
    }
    public static int bs(int[] arr, int e) {
        int lower = 0;
        int mid = arr.length/2;
        int upper = arr.length;

        while(lower < upper) {
            if(arr[mid] == e) return 1;
            else if(mid == lower) return 0;
            else if(mid == upper) mid--;
            else if(e < arr[mid]) {
                upper = mid;
                mid -= (upper - lower) / 2;
            } else {
                lower = mid;
                mid += (upper - lower) / 2;
            }
        }
        return 0;
    }
}