#include <vector>
#include <iostream>
#include <map>
const int INF = 1e9;
using namespace std;

pair<string, string> get_name(string S){
  string s, t;
  for(int i = 0; i < S.length(); ++i){
    if(S[i] == '-'){
      t = S.substr(i+1);
      break;
    }
    s += S[i];
  }
  return pair<string, string>(s, t);
}

void dfs(vector< vector<int> > &G, vector<int> &C, int v){
  int n = G.size();
  for(int i = 0; i < n; ++i){
    if(G[v][i] >= INF && G[i][v] >= INF) continue;
    if(C[i] == 0){
      C[i] = -C[v];
      dfs(G, C, i);
    }
  }
}

int main(){
  int N;
  while(cin >> N, N){
  map<string, int> m;
  vector<string> from(N), to(N);
  for(int i = 0; i < N; ++i){
    string s;
    cin >> s;
    pair<string, string> E = get_name(s);
    //cout << E.first << " " << E.second << endl;
    m[E.first] = 1;
    m[E.second] = 1;
    from[i] = E.first;
    to[i] = E.second;
  }
  int t = 1;
  for(auto itr = m.begin(); itr != m.end(); ++itr){
    itr->second = t;
    ++t;
  }
  int n = m.size();
  cout << n << endl;
  vector< vector<int> > G(n, vector<int>(n, INF));
  for(int i = 0; i < N; ++i){
    int u = m[from[i]] - 1, v = m[to[i]] - 1;
    G[u][v] = 1;
  }
  vector<int> C(n, 0);
  for(int i = 0; i < n; ++i){
    if(!C[i]){
      C[i] = 1;
      dfs(G, C, i);
    }
  }

  vector< vector<int> > G_ = G;
  for(int i = 0; i < n; ++i){
    for(int j = 0; j < n; ++j){
      if(G[i][j] < INF || G[j][i] < INF) continue;
      bool f = false;
      for(int k = 0; k < n; ++k){
        if((G[i][k] < INF && G[j][k] < INF) || (G[k][i] < INF && G[k][j] < INF)){
          f = true;
          break;
        }
      }
      for(int k = 0; k < n; ++k){
        if((G[i][k] < INF && G[k][j] < INF) || (G[k][i] < INF && G[j][k] < INF)){
          f = false;
          break;
        }
      }
      if(f){
        G_[i][j] = 1;
        G_[j][i] = 1;
      }
    }
  }

  for(int k = 0; k < n; ++k){
    for(int i = 0; i < n; ++i){
      for(int j = 0; j < n; ++j){
        G_[i][j] = min(G_[i][j], G_[i][k] + G_[k][j]);
      }
    }
  }

  //for(auto itr = m.begin(); itr != m.end(); ++itr) cout << itr->first << " " << itr->second << endl;
  //for(int i = 0; i < n; ++i) cout << C[i] << " ";cout << endl;

  int M;
  cin >> M;
  for(int i = 0; i < M; ++i){
    string S;
    cin >> S;
    pair<string, string> Q = get_name(S);
    int u = m[Q.first] - 1, v = m[Q.second] - 1;
    if(u < 0 || v < 0){
      cout << "NO" << endl;
      continue;
    }
    if(C[u] != C[v] && G_[u][v] < INF) cout << "YES" << endl;
    else cout << "NO" << endl;
  }
  }
  return 0;
}

