import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
import static java.util.Collections.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
HashMap<Integer,Integer> hashs = new HashMap<>();
int[] input = new int[N];
for (int i = 0 ; i < N; i++)
{
input[i] = Integer.parseInt(st.nextToken());
hashs.put(input[i],hashs.getOrDefault(input[i],0)+1);
}
int M = Integer.parseInt(br.readLine());
StringTokenizer st2 = new StringTokenizer(br.readLine());
int[] input2 = new int[M];
for (int i = 0 ; i< M; i++)
{
input2[i] = Integer.parseInt(st2.nextToken());
}
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i < M; i++)
{
sb.append(hashs.getOrDefault(input2[i],0)).append(" ");
}
System.out.println(sb);
}
}
HashMap을 이용하여 첫번째에는 값을 나타내고 두번째에는 그 값이 나온 빈도수를 구하는 문제였다. 여기서 key Point는 .getOrDefault()메서드였다. 여기서 그 값이 안 나오면 0을 넣고 그 다음에 그 값이 나오면 그 값에 +1을 하는 구조이다. 어려웠던 문제였다. 다시 풀어보면 좋을 것 같다.