#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<vector>
#define N 100
#define S_SIZE 40
#define TRIE_SIZE 10000
using namespace std;
struct trie_node{int next[26],no;}trie[TRIE_SIZE];
int visit[N],low[N],n,cnt;
char name[N][S_SIZE],s[S_SIZE];
bool G[N][N];
vector<int>ans;
int getno(int i,int p){
    if(!s[i])return trie[p].no;
    return getno(i+1,trie[p].next[s[i]-97]);
}
void dfs(int p,int i){
    int child=0;
    bool is_av=0;
    visit[i]=low[i]=++cnt;
    for(int j=0;j<n;j++)if(G[i][j]&&j!=p){
        if(visit[j])low[i]=min(low[i],visit[j]);
        else{
            dfs(i,j);
            low[i]=min(low[i],low[j]);
            if(low[j]>=visit[i])is_av=1;
            child++;
        }
    }
    if(i==p&&child>1||i!=p&&is_av)ans.push_back(i);
}
bool ans_cmp(int i,int j){
    return strcmp(name[i],name[j])<0;
}
int main(){
    for(int t=1;scanf("%d",&n)&&n;t++){
        int trie_size=1,m;
        memset(trie,-1,sizeof(trie));
        memset(visit,0,sizeof(visit));
        memset(G,0,sizeof(G));
        ans.clear();
        cnt=0;
        for(int i=0;i<n;i++){
            int p=0;
            scanf("%s",name[i]);
            for(int j=0;name[i][j];j++){
                if(trie[p].next[name[i][j]-97]==-1)trie[p].next[name[i][j]-97]=trie_size++;
                p=trie[p].next[name[i][j]-97];
            }
            trie[p].no=i;
        }
        scanf("%d",&m);
        for(int i=0;i<m;i++){
            int a,b;
            scanf("%s",s);
            a=getno(0,0);
            scanf("%s",s);
            b=getno(0,0);
            G[a][b]=G[b][a]=1;
        }
        dfs(0,0);
        sort(ans.begin(),ans.end(),ans_cmp);
        printf("City map #%d: %d camera(s) found\n",t,ans.size());
        for(int i=0;i<ans.size();i++)puts(name[ans[i]]);
        putchar('\n');
    }
    return 0;
}
