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

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func BinarySearch(arr []int, value int) int {
	r := len(arr)
	l := 0

	for r >= l {
		m := (l + r) / 2
		v := arr[m]

		switch {
		case v == value:
			return m
		case v < value:
			l = m + 1
		case v > value:
			r = m - 1
		}
	}

	return -1
}

func ScanArray(r io.Reader) *[]int {
	var n int
	fmt.Fscan(r, &n)
	arr := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Fscan(r, &arr[i])
	}
	return &arr
}

func main() {
	r := bufio.NewReader(os.Stdin)
	s := *ScanArray(r)
	t := *ScanArray(r)

	var count int
	for _, v := range t {
		if BinarySearch(s, v) >= 0 {
			count++
		}
	}

	fmt.Println(count)
}