#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef vector<int> VI;
typedef vector<VI> VVI;
typedef vector<double> VD;
typedef vector<string> VS;
#define pb push_back
#define pf push_front
#define rep(i,n) for (int i=0; i < (n); i++)
#define all(c) (c).begin(), (c).end()
 
struct michi{
  VS upper,lower;
  char verti;
  bool check;
};
map<string,michi> mamap;
void nocheck(){
  for(map<string,michi>::iterator a=mamap.begin();
      a!=mamap.end();a++){
    a->second.check=false;
  }
}
bool jouge(VS upper,VS lower){
    for(VS::iterator a=upper.begin();
      a!=upper.end();a++){
      for(VS::iterator b=lower.begin();
	  b!=lower.end();b++){
	if(*a==*b) return true;
      }

    }
    return false;
}
 
bool searchup(string desti,string pres){
  // cout<<pres<<" dddddddd    ";
  if(mamap[pres].check) return false;
  mamap[pres].check=true;
   
  if(desti==pres) return true;
  VS dolist=mamap[pres].lower;
  VS uplist=mamap[pres].upper;
  //  cout<<uplist.size();
  for(VS::iterator a=dolist.begin();
      a!=dolist.end();a++){
    //    cout<<*a<<"  keke";
    VS uup=mamap[*a].upper;
    for(VS::iterator b=uup.begin();
	b!=uup.end();b++){
      if(jouge(dolist,mamap[*b].upper)) continue;
      if(jouge(uplist,mamap[*b].lower)) continue;
      if(searchup(desti,*b)) return true; 
    }
  }  
  for(VS::iterator a=uplist.begin();
      a!=uplist.end();a++){
    //    cout<<*a<<"  keke";
    VS uup=mamap[*a].lower;
    for(VS::iterator b=uup.begin();
	b!=uup.end();b++){
      if(jouge(dolist,mamap[*b].upper)) continue;
      if(jouge(uplist,mamap[*b].lower)) continue;
      if(searchup(desti,*b)) return true; 
    }
  }    
  
  for(VS::iterator a=uplist.begin();
      a!=uplist.end();a++){
    //    cout<<*a<<"  keke";
    if(searchup(desti,*a)) return true;  
  }
 
  return false;
}
bool sesearch(string fir,string sec){
  michi strong,weak;
  strong=mamap[fir];
  weak=mamap[sec];
  // cout<<endl<<endl<<endl<<fir<<sec<<endl;
  // cout<<(int)strong.verti<<(int)weak.verti<<endl;
  if(strong.verti==weak.verti) return false;
 
  nocheck();
  if(searchup(fir,sec)) return true;
  // if(searchup(sec,fir)){
  //   cout<<"hehe";
  //   nocheck();
  //   if(searchup(fir,sec)) return true;
  //   else return false;
  // }
  return false;
}
void vertisho(string fir,char vert){
  if(mamap[fir].verti!=-1) return; 
  mamap[fir].verti=vert;
 
  if(vert==1) vert=0;
  else if(vert==0) vert=1;
  //cout<<fir<<" "<<(int)mamap[fir].verti<<endl;
  for(VS::iterator a=mamap[fir].upper.begin();
      a!=mamap[fir].upper.end();a++){
    //    cout<<*a<<endl;
    vertisho(*a,vert);
  }
  for(VS::iterator a=mamap[fir].lower.begin();
      a!=mamap[fir].lower.end();a++)
    vertisho(*a,vert);
}
void wakeru(string& a,string& b){
  int i;
  string tmp;
  cin>>tmp;
  for(i=0;i<tmp.size();i++){
    if(tmp[i]=='-') break;
  }
  a=tmp.substr(0,i);
  b=tmp.substr(i+1);
  // cout<<a<<endl<<b<<endl;
 
}
 
int main() {
  int n,m,tmptmp;
  string fir,sec,tmpst;
  michi ue,sita;
  while(true){
    mamap=map<string,michi>();
    cin>>n;
    if(n==0) return 0;
    //    cout<<"n:"<<n<<"m:"<<m<<endl;
    rep(i,n){
      wakeru(fir,sec);
      //cin>>fir>>sec;
      //cout<<fir<<endl<<sec<<endl;
      // mamap[fir].lower.pb[sec];
      // mamap[sec].upper.pb[fir];
      ue=mamap[fir];
      sita=mamap[sec];
      ue.lower.pb(sec);
      sita.upper.pb(fir);
      mamap[fir]=ue;
      mamap[sec]=sita;
    }
     for(map<string,michi>::iterator a=mamap.begin();
      a!=mamap.end();a++){
       a->second.verti=-1;
       //       cout<<a->first<<(int)a->second.verti<<endl;
    }
     nocheck();
     for(map<string,michi>::iterator a=mamap.begin();
      a!=mamap.end();a++){
       if(a->second.verti==-1)
	 vertisho(a->first,0);
       //       cout<<a->first<<(int)a->second.verti<<endl;
    }
     //     vertisho(fir,0);
     cout<<mamap.size()<<endl;
     cin>>m;
     rep(i,m){
       wakeru(fir,sec);
 
       //cout<<fir<<endl<<sec<<endl;
       nocheck();
       if(sesearch(fir,sec)) cout<<"YES"<<endl;
       else cout<<"NO"<<endl;
       
     }
 
  }
  return 0;
}

Measured memory_bytes: 1592