//用能访问的最远的服务器的代理服务器
#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;
	}
}