#include <iostream>
#include <vector>
#include <string>
#include <map>

using namespace std;

int N, M;
int G[205][205];
map<string, int> mp;
vector<int> g[205];
int V;
bool used[205];
int color[205];

bool dfs(int v, int t)
{
	used[v] = true;
	if(v == t) return true;
	
	bool ret = false;
	for(int i = 0; i < g[v].size(); i++){
		if(used[g[v][i]]) continue;
		ret |= dfs(g[v][i], t);
	}
	return ret;
}

void color_dfs(int v, int c)
{
	color[v] = c;
	for(int i = 0; i < g[v].size(); i++){
		if(color[g[v][i]]) continue;
		color_dfs(g[v][i], -c);
	}
}

int main(void)
{
	while(1){
		cin >> N;
		if(N == 0) break;
		for(int i = 1; i <= 200; i++){
			for(int j = 1; j <= 200; j++){
				G[i][j] = 0;
			}
		}
		
		int id = 1;
		string s, t;
		mp.clear();
		for(int i = 0; i < N; i++){
			cin >> s;
			for(int j = 0; j < s.size(); j++){
				if(s[j] == '-'){
					t = s.substr(j+1);
					s = s.substr(0, j);
					break;
				}
			}
			if(mp.count(s) == 0) mp[s] = id++;
			if(mp.count(t) == 0) mp[t] = id++;
			G[mp[s]][mp[t]] = 1;
		}
		V = id-1;
		cout << V << endl;
		
		for(int i = 1; i <= V; i++) g[i].clear();
		for(int i = 1; i <= V; i++){
			for(int j = 1; j <= V; j++){
				if(G[i][j]){
					g[i].push_back(j);
					g[j].push_back(i);
				}
			}
		}
		
		for(int i = 1; i <= V; i++) color[i] = 0;
		for(int i = 1; i <= V; i++){
			if(!color[i]) color_dfs(i, 1);
		}
		
		for(int i = 1; i <= V; i++){
			for(int j = 1; j <= V; j++){
				if(i >= j) continue;
				if(G[i][j]) continue;
				
				bool flag = false;
				for(int k = 1; k <= V; k++){
					if(G[i][k] == 1 && G[j][k] == 1){
						flag = true;
						break;
					}
					if(G[k][i] == 1 && G[k][j] == 1){
						flag = true;
						break;
					}
				}
				if(!flag) continue;
				
				flag = true;
				for(int k = 1; k <= V; k++){
					if(G[i][k] == 1 && G[k][j] == 1){
						flag = false;
						break;
					}
					if(G[k][i] == 1 && G[j][k] == 1){
						flag = false;
						break;
					}
				}
				if(flag) G[i][j] = G[j][i] = 2;
			}
		}
		
		for(int i = 1; i <= V; i++){
			g[i].clear();
			for(int j = 1; j <= V; j++){
				if(G[i][j]) g[i].push_back(j);
			}
		}
		
		cin >> M;
		for(int i = 0; i < M; i++){
			cin >> s;
			for(int j = 0; j < s.size(); j++){
				if(s[j] == '-'){
					t = s.substr(j+1);
					s = s.substr(0, j);
					break;
				}
			}
			if(mp.count(s) == 0 || mp.count(t) == 0){
				cout << "NO" << endl;
				continue;
			}
			int S = mp[s], T = mp[t];
			
			if(color[S] == color[T]){
				cout << "NO" << endl;
				continue;
			}
			
			for(int i = 1; i <= V; i++) used[i] = false;
			if(dfs(S, T)) cout << "YES" << endl;
			else cout << "NO" << endl;
		}
	}
	
	return 0;
}

