bfs
#include<cstdio>
#include<iostream>
#include<cstring>
#include<map>
#include<string>
#include<queue>
using namespace std;
#define maxn 1100
#define maxm 221000
map<string,int> mat;
int head[maxn],v[maxm],next[maxm];
int cnt;
int dis[maxn];
int ans=0;
int sum;
void add(int x,int y)
{
v[cnt]=y;
next[cnt]=head[x];
head[x]=cnt++;
}
void bfs(int x)
{
memset(dis,-1,sizeof(dis));
queue<int> q;
q.push(x);
dis[x]=0;
sum=0;
while(!q.empty())
{
sum++;
int u=q.front();
q.pop();
ans=max(ans,dis[u]);
for(int i=head[u];~i;i=next[i])
{
if(dis[v[i]]==-1)
{
q.push(v[i]);
dis[v[i]]=dis[u]+1;
}
}
}
}
int main()
{
int n;
int m;
while(cin>>n&&n)
{
mat.clear();
memset(head,-1,sizeof(head));
cnt=0;
string str1;
string str2;
for(int i=1;i<=n;i++)
{
cin>>str1;
mat[str1]=i;
}
cin>>m;
for(int i=1;i<=m;i++)
{
cin>>str1>>str2;
add(mat[str1],mat[str2]);
add(mat[str2],mat[str1]);
}
for(int i=1;i<=n;i++)
{
bfs(i);
if(sum!=n)
{
printf("-1\n");
break;
}
}
if(sum==n)
printf("%d\n",ans);
}
return 0;
}