#include <list>
#include <queue>
#include <vector>
#include <iostream>
using namespace std;
// ------ Class ------ //
class Graph1 {
public:
	// ------ Variables ------ //
	static const int INF = 1000000000;
	int V; vector<vector<int> > G;

	// ------ Constructors ------ //
	Graph1() : V(0), G(vector<vector<int> >()) {}
	Graph1(int v) : V(v), G(vector<vector<int> >(v)) {}
	Graph1(vector<vector<int> > g) : V(g.size()), G(g) {}

	// ------ Basic Functions ------ //
	void add1(int v1, int v2) { G[v1].push_back(v2); }
	void add2(int v1, int v2) { add1(v1, v2); add1(v2, v1); }

	// ------ Algorithms ------ //
	vector<int> dist(int s) {
		queue<int> que; que.push(s);
		vector<int> d(V, INF); d[s] = 0;
		while (!que.empty()) {
			int u = que.front(); que.pop();
			for (int i = 0; i < G[u].size(); i++) {
				if (d[G[u][i]] == INF) {
					d[G[u][i]] = d[u] + 1;
					que.push(G[u][i]);
				}
			}
		}
		return d;
	}
};
int N, Q, c, u, v; Graph1 G;
int main() {
	cin >> N; G = Graph1(N);
	for (int i = 0; i < N; i++) {
		cin >> u >> c;
		for (int j = 0; j < c; j++) {
			cin >> v; G.add1(u - 1, v - 1);
		}
	}
	cin >> Q;
	for (int i = 0; i < Q; i++) {
		cin >> u >> v >> c;
		int d = G.dist(u - 1)[v - 1] + 1;
		if (d > c) cout << "NA" << endl;
		else cout << d << endl;
	}
	return 0;
}