#include<iostream>
#include<cstring>
#include<queue>
#define MAX_N 110
#define INF (1<<30)
bool A[MAX_N][MAX_N];
int rooter_num;
using namespace std;
int bfs(int,int);
int main()
{
  int n,startNode,goalNode,TTL;
  int r,k,t;
  int a;
  memset(A,false,sizeof(A));
  cin>>rooter_num;
  /*------------input---------------*/
  for(int i=0;i<rooter_num;i++)
    {
      cin>>r>>k;
      for(int j=0;j<k;j++)
	{
	  cin>>t;
	  A[r][t]=true;
	}
    }
  cin>>n;
  /*-------------search--------------*/
  for(int i=0;i<n;i++)
    {
      cin>>startNode>>goalNode>>TTL;
      a=bfs(startNode,goalNode);
      //cout<<"TTL="<<TTL<<";"<<"a-1="<<a<<endl;
      /*
	 TTLの減少値 = (それまでに通ったルータの数) - 1
	 直前のNodeでTTLが1以上ならばパケットが通るので
	 goal地点でのTTLの減少値がTTLと同等,またはそれ以下ならば
	 パケットが通る事になる。
       */
      if(a<=TTL)cout<<a<<endl;
      else cout<<"NA"<<endl;
       
    }
  return 0;
}
int bfs(int startNode,int goalNode)
{
  queue<int>Q;
  int visited[rooter_num+1];
  /*
    visitedは既に通過しているかの判定と経由したルータの数を保持する
  */
  memset(visited,0,sizeof(visited));
  /*
    memsetによって全てを０で初期化する
  */

  int currentNode=startNode;
  Q.push(currentNode);
  visited[currentNode]=1;

  /*-------BFS--------*/  
  while(!Q.empty())
    {
      currentNode=Q.front();
      Q.pop();
      for(int nextNode=1;nextNode<=rooter_num;nextNode++)
	{

	  if(A[currentNode][nextNode]==0)continue;
	  /*
	    接続されていない場合を切り取った
	  */
	  if(nextNode==goalNode)return visited[currentNode]+1;
	  /*
	    goalNodeの接続を確認したので探索を打ち切る
	  */
	  if(visited[nextNode]<=0)
	    {
	      visited[nextNode]=visited[currentNode]+1;
	      Q.push(nextNode);
	    }
	  /*
	    まだ訪れていない(かつ接続出来るNodeを)キューに追加する
	   */
	}
    }
  return INF;
  /*
    接続出来ない場合無限大を返す
   */
}