// 2004à\IF : Name the Crossing

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

using namespace std;

int c[200][200];

// ¯ÌÊèð`FbN
bool check(int A, int B, int size){
	bool flag = false;
	for(int i=0;i<size;i++){
		if(i==A||i==B) continue;
		if(c[i][A]==1&&c[i][B]==1) flag = true;
		if(c[i][A]==1&&c[B][i]==1) return false;
		if(c[A][i]==1&&c[i][B]==1) return false;
		if(c[A][i]==1&&c[B][i]==1) flag = true;
	}
	return flag;
}

int main(){
	int n, m;
	while(cin >> n, n){
		// Ot(×Úsñ)Ìú»
		for(int i=0;i<200;i++)
			for(int j=0;j<200;j++) c[i][j] = 1000000;
		// ÊèÌ¼OÆÔðÎt¯émap
		map<string, int> mp;
		int size = 0;
		for(int i=0;i<n;i++){
			string name; cin >> name;
			int pos = name.find("-");
			string A = name.substr(0,pos);
			string B = name.substr(pos+1);
			if(!mp.count(A)) mp[A] = size++;
			if(!mp.count(B)) mp[B] = size++;
			// AÆBÍá¤ûüÌÊè
			c[mp[A]][mp[B]] = 1;
		}
		// ¯ÈÊèð`FbN
		for(int i=0;i<size;i++){
			for(int j=i+1;j<size;j++){
				// ¯ÈçiÆjÍ¯¶ûüÌÊè
				if(check(i,j,size)) c[i][j] = c[j][i] = 2;
			}
		}
		// Warshall Floyd@
		// Ê|ÈÌÅC ç©¶ßS_ÔÌ£ðßÄµÜ¤
		for(int k=0;k<size;k++)
			for(int i=0;i<size;i++){
				if(k==i) continue;
				for(int j=0;j<size;j++)
					c[i][j] = min(c[i][j],c[i][k]+c[k][j]);
			}
		cout << size << endl; 
		cin >> m;
		for(int i=0;i<m;i++){
			string name; cin >> name;
			int pos = name.find("-");
			string A = name.substr(0,pos);
			string B = name.substr(pos+1);
			// \zµ½OtãÅCA-BÖÌpXª¶ÝµC
			// pXÌ·³ªï(ÙÈéûüÌÊè)ÈçYES
			if(mp.count(A)&&mp.count(B)&&c[mp[A]][mp[B]]%2==1) puts("YES");
			else puts("NO");
		}
	}
}