#include<map>
#include<set>
#include<iostream>
using namespace std;
const int N=1005,M=1e5+5;
set<string>s;
string t,b[M];
map<string,int>mp;
int i,j,n,m,tot,all,minn=1e9;
int main(){
cin.tie(0),cout.tie(0);
ios::sync_with_stdio(false);
cin>>n;
for(i=0;i<n;i++)
cin>>t,mp[t]=0,s.insert(t);
cin>>m;
for(i=0;i<m;i++){
cin>>b[i];
set<string>::iterator it=s.find(b[i]);
if(it!=s.end()) all++,s.erase(it);
}cout<<all<<'\n'; //算单词出现次数
if(!all){
cout<<0;
return 0;
}for(i=0;i<m;i++){
map<string,int>::iterator it;
while(j<m&&tot<all){ //必须满足所有all个单词都在里面才能画
it=mp.find(b[j++]);
if(it!=mp.end())
tot+=it->second++==0; //如果这个单词还没出现过就加到tot上
}if(tot<all) break;
//这个条件表示如果j指针已经走到最后还无法满足all个单词的话,之后更短的距离也一定不能满足,直接跳出循环
minn=min(j-i,minn); //算长度
it=mp.find(b[i]);
tot-=!--it->second; //如果这是这条中唯一的一个单词,tot就-1
}cout<<minn;
return 0;
}
双指针做的,不知道错哪里了。。。 提交记录