#include <iostream> #include <queue> #include <vector> #include <cstring> #include <cstdio> #include <map> using namespace std; #define MAX 9999999 int dis[1000+6][1000+6]; int vis[10000+6]; string name[1000+10]; int n; map<string,int> mymap; vector<int> vec[1000+10]; void spfa(int i) { memset(vis,0,sizeof(vis)); dis[i][i]=0; vis[i]=1; queue<int> q; q.push(i); while(!q.empty()) { int temp=q.front(); q.pop(); for(int j=0;j<vec[temp].size();j++) { int to=vec[temp][j]; if(vis[to]) continue; dis[i][to]=dis[i][temp]+1; q.push(to); vis[to]=1; } } } int main() { int T; while(cin>>n,n) { for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { dis[i][j]=dis[j][i]=MAX; } } for(int i=0;i<n;i++) vec[i].clear(); int cou=0; string str; for(int i=0;i<n;i++) { cin>>str; mymap[str]=cou++; } int m; cin>>m; string str1,str2; for(int i=0;i<m;i++) { cin>>str1>>str2; int t1=mymap[str1]; int t2=mymap[str2]; vec[t1].push_back(t2); vec[t2].push_back(t1); } for(int i=0;i<n;i++) { spfa(i); } int ans=0; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { ans=max(ans,dis[i][j]); } } if(ans==MAX) cout<<-1<<endl; else cout<<ans<<endl; } return 0; }