#include<iostream>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<algorithm>
#include<functional>
#include<iomanip>
#include<queue>
#include<ciso646>
#include<utility>
#include<map>
#include<complex>
using namespace std;
typedef long long ll;
const ll mod = 1000000007;
const ll INF = mod * mod;
typedef pair<int, int> P;
typedef pair<ll, ll> LP;
typedef vector<int> vec;
#define rep(i,n) for(int i=0;i<n;i++)
#define Rep(i,sta,n) for(int i=sta;i<n;i++)
#define stop char nyaa;cin>>nyaa;
#define per(i,n) for(int i=n-1;i>=0;i--)
typedef long double ld;

struct uf {
private:
	vector<int> par, ran;
public:
	uf(int n) {
		par.resize(n, 0);
		ran.resize(n, 0);
		rep(i, n) {
			par[i] = i;
		}
	}
	int find(int x) {
		if (par[x] == x)return x;
		else return par[x] = find(par[x]);
	}
	void unite(int x, int y) {
		x = find(x), y = find(y);
		if (x == y)return;
		if (ran[x] < ran[y]) {
			par[x] = y;
		}
		else {
			par[y] = x;
			if (ran[x] == ran[y])ran[x]++;
		}
	}
	bool same(int x, int y) {
		return find(x) == find(y);
	}
};

int n, m;
void solve() {
	map<string, int> mp;
	map<string, bool> used;
	int tmp = 0;
	vector<P> v(n);
	rep(i, n) {
		string s; cin >> s;
		rep(j, s.length()) {
			if (s[j] == '-') {
				string le = s.substr(0, j);
				string ri = s.substr(j + 1, (int)s.length() - (j+1));
				int lid, rid;
				if (!used[le]) {
					used[le] = true;
					mp[le] = tmp; tmp++;
				}
				lid = mp[le];
				if (!used[ri]) {
					used[ri] = true;
					mp[ri] = tmp; tmp++;
				}
				rid = mp[ri];
				v[i] = { lid,rid };
				break;
			}
		}
	}
	vector<vector<int>> vl(tmp), vr(tmp);
	rep(i, n) {
		vl[v[i].first].push_back(i);
		vr[v[i].second].push_back(i);
	}
	vector<vector<bool>> b(tmp);
	rep(i, tmp)b[i].resize(tmp, false);
	rep(i, tmp) {
		rep(j, vl[i].size()) {
			Rep(k,j+1, vl[i].size()) {
				int lid = v[vl[i][j]].second;
				int rid = v[vl[i][k]].second;
				b[lid][rid] = b[rid][lid] = true;
			}
		}
		rep(j, vr[i].size()) {
			Rep(k, j + 1, vr[i].size()) {
				int lid = v[vr[i][j]].first;
				int rid = v[vr[i][k]].first;
				b[lid][rid] = b[rid][lid] = true;
			}
		}
	}
	rep(i, tmp) {
		rep(j, vl[i].size()) {
			rep(k, vr[i].size()) {
				int lid = v[vl[i][j]].second;
				int rid = v[vr[i][k]].first;
				b[lid][rid] = b[rid][lid] = false;
			}
		}
	}
	uf u(tmp); vector<vector<int>> bG(tmp);
	rep(i, n) {
		u.unite(v[i].first, v[i].second);
		bG[v[i].first].push_back(v[i].second);
		bG[v[i].second].push_back(v[i].first);
	}
	//uf u(tmp);
	//rep(i, tmp)rep(j, tmp)if (b[i][j])u.unite(i, j);
	vector<int> isns(tmp);
	vector<bool> chked(tmp, false);
	rep(i, tmp) {
		if (chked[i])continue;
		int cur = 0;
		queue<int> q; q.push(i);
		while (!q.empty()) {
			int len = q.size();
			rep(aa, len) {
				int id = q.front(); q.pop();
				isns[id] = cur;
				rep(j, bG[id].size()) {
					int to = bG[id][j];
					if (chked[to])continue;
					chked[to] = true;
					q.push(to);
				}
			}
			cur ^= 1;
		}
	}

	vector<vector<int>> G(tmp);
	rep(i, n) {
		int lid = v[i].first;
		int rid = v[i].second;
		G[lid].push_back(rid);
	}
	rep(i, tmp)rep(j, tmp)if (b[i][j])G[i].push_back(j);

	cout << tmp << endl;
	int m; cin >> m;
	rep(i, m) {
		string s; cin >> s;
		int len = s.length();
		int lid, rid;
		bool valid = true;
		rep(j, len) {
			if (s[j] == '-') {
				string le = s.substr(0, j);
				string ri = s.substr(j + 1, len - (j + 1));
				if (!used[le] || !used[ri])valid = false;
				lid = mp[le], rid = mp[ri];
				break;
			}
		}
		if (!valid) {
			cout << "NO" << endl; continue;
		}
		if (!u.same(lid, rid)) {
			cout << "NO" << endl; continue;
		}
		if (isns[lid] == isns[rid]) {
			cout << "NO" << endl; continue;
		}
		fill(chked.begin(), chked.begin() + tmp, false);
		queue<int> q; q.push(lid);
		bool f = false;
		while (!q.empty()) {
			int id = q.front(); q.pop();
			if (id == rid)f = true;
			rep(j, G[id].size()) {
				int to = G[id][j];
				if (!chked[to]) {
					chked[to] = true;
					q.push(to);
				}
			}
		}
		if (f) {
			cout << "YES" << endl;
		}
		else {
			cout << "NO" << endl;
		}
	}
}


signed main() {
	ios::sync_with_stdio(false);
	cin.tie(0);
	//cout << fixed << setprecision(10);
	while(cin>>n,n)solve();
	//stop
		return 0;
}



Measured memory_bytes: 3388