import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.*;
public class Main {
static class Input{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
StreamTokenizer in=new StreamTokenizer(br);
public String nextStr() throws IOException {
return br.readLine();
}
public int nextInt() throws IOException{
in.nextToken();
return (int) in.nval;
}
}
static Map<String,Integer> map=new HashMap<>();
static List<String> list=new ArrayList<>();
static int[] nums;
static int val;
public static void main(String[] args) throws IOException{
Input sc=new Input();
int n=sc.nextInt();
nums=new int[n];
for (int i = 0; i < n; i++) {
String t=sc.nextStr();
map.put(t,i);
nums[i]--;
}
int m=sc.nextInt();
for (int i = 0; i < m; i++) {
list.add(sc.nextStr());
if (map.containsKey(list.get(i))&&nums[map.get(list.get(i))]++<0) val++;
}
System.out.println(val);
int t=fen(val,m);
System.out.println(t);
}
public static int fen(int l,int r){
int ans=0;
while (l<=r){
int key=(l+r)>>1;
if (qs(key)){
r=key-1;
ans=key;
}
else {
l=key+1;
}
}
return ans;
}
public static boolean qs(int key){
Queue<String> queue=new LinkedList<>();
int[] cost=new int[map.size()];
int val1=0;
for (int r=0; r < list.size(); r++) {
queue.add(list.get(r));
if (map.containsKey(list.get(r))&&cost[map.get(list.get(r))]++<1) val1++;
if (queue.size()>key) {
String t=queue.poll();
if (map.containsKey(t)){
if (cost[map.get(t)]--<2) val1--;
}
}
if (val1==val) return true;
}
return false;
}
}
我的思路是求得在文章中最多出现了多少次,然后在这个值和文章长度里面二分,但是全wa了,案列全过,自己案例也过了