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

#include <bits/stdc++.h>

using namespace std;

#define FOR(i,s,e) for((i)=(s);(i)<(int)(e);(i)++)
#define REP(i,e) FOR(i,0,e)

#define all(o) (o).begin(), (o).end()
#define psb(x) push_back(x)
#define mp(x,y) make_pair((x),(y))

typedef long long ll;
typedef pair<int, int> PII;

const double EPS = 1e-10;

const int N = 1e+5;
const int Q = 50000;
int n, q;
int s[N], t[Q];

int binary_search(int x) {
  int l = -1;
  int r = n-1;
  int m;
  while (r-l > 1) {
    m = (l+r)/2;
//   if (s[m] == x)
//      return m;
//    else if (x < s[m])
    if (x <= s[m])
      r = m;
    else
      l = m;
//printf("(l, r] = (%d %d]\n", l, r);
  }

  if (s[r]==x)
    return r;
  else
    return -1;
}

int main() {
  int i;
  scanf("%d ", &n);
  for (i=0; i<n; i++)
    scanf("%d ", s+i);
  scanf("%d ", &q);
  for (i=0; i<q; i++)
    scanf("%d ", t+i);

  int res = 0;
  for (i=0; i<q; i++)
    if (binary_search(t[i]) != -1) {
//      printf("%d\n", t[i]); 
      res++;
    }

  printf("%d\n", res);

	return 0;
}