//用能访问的最远的服务器的代理服务器
#include <iostream>
using namespace std;
struct server{
string ip;
int far;//代理服务器能到达的最远的服务器的下标
};
int main()
{
int n,m;
while(cin>>n)
{
server dl[n+1];
for(int i=1;i<=n;i++)
{
cin>>dl[i].ip;
}
cin>>m;
server fwq[m+1];
for(int i=1;i<=m;i++)
{
cin>>fwq[i].ip;
}
int fuhe=1;
//考虑没有符合要求的安排方式的情况
if(n==1)
{
for(int j=1;j<=m;j++)
{
if(dl[1].ip==dl[j].ip)
{
cout<<"-1"<<endl;
fuhe=0;
break;
}
}
}
//考虑有符合要求的安排方式的情况
int s=-1;
int xb=1;//当前访问到的服务器下标
int flag=0;//为1代表已经有代理服务器可以访问剩余所有服务器了
while(xb<=m&&fuhe==1)
{
s++;
for(int i=1;i<=n&&(flag==0);i++)//更新far
{
int j=xb;//从当前服务器的下标开始算
while(dl[i].ip!=fwq[j].ip)
{
j++;
if(j==m+1)
{
flag=1;
break;
}
}
dl[i].far=j;
}
if(flag==1)
{
xb=m+1;
continue;
}
xb=dl[1].far;//下标不能是0
for(int i=1;i<=n;i++)
{
if(dl[i].far>xb)xb=dl[i].far;
}
}
if(fuhe==1)
cout<<s<<endl;
}
}