#include #include #include #include using namespace std; pair read_cross() { string str;cin>>str; int pos=str.find("-"); return make_pair(string(str,0,pos),string(str,pos+1)); } bool solve(int (*graph)[201],int cnt,int from,int to) { int dist[201]={0}; set updt; updt.insert(from); dist[from]=2; while(!updt.empty()){ int c=*updt.begin(),dc=dist[c]; updt.erase(c); for (int i=1;i<=cnt;i++){ if (dist[i]!=0||graph[c][i]==0) continue; dist[i]=dc+graph[c][i]; updt.insert(i); if (i==to) return (dist[i]%2)==1; } } return false; } int main() { for (;;){ int n;cin>>n; if (n==0) break; map tbl; int cnt=0; int graph[201][201]={0}; while(n--){ pair c=read_cross(); if (tbl[c.first]==0) tbl[c.first]=++cnt; if (tbl[c.second]==0) tbl[c.second]=++cnt; graph[tbl[c.first]][tbl[c.second]]=1; } for (int i=1;i<=cnt;i++){ for (int j=1;j<=cnt;j++){ bool same=false; for (int k=1;k<=cnt;k++){ if ((graph[i][k]==1&&graph[j][k]==1)|| (graph[k][i]==1&&graph[k][j]==1)) same=true; if ((graph[i][k]==1&&graph[k][j]==1)|| (graph[k][i]==1&&graph[j][k]==1)){ same=false; break; } } if (same) graph[i][j]=graph[j][i]=2; } } cout<>m; while(m--){ pair c=read_cross(); bool ans=false; if (tbl[c.first]!=0&&tbl[c.second]!=0) ans=solve(graph,cnt,tbl[c.first],tbl[c.second]); cout<<(ans?"YES":"NO")<