#include <iostream>
#include <sstream>
#include <vector>
#include <map>
#include <cmath>
using namespace std;

#define DIS(x,y) (sqrt((double)(x)*(double)(x)+(double)(y)*(double)(y)))
#define INF 999999


vector<double> dist;	// ÅZ£ði[·éXg
vector<int> route;	  // ÅZ[gði[·éXg

void Dijkstra(vector<vector<double> >& connect, int start)
{
	// m[hÌæ¾
	int node_n = connect.size();


	// ÅZ£ði[·éXgðINFÅú»(n_Í0)
	dist.clear();
	dist.resize(node_n);
	for(int i=0; i<node_n; i++) { dist[i] = INF; }
	dist[start] = 0;
	
	// ÅZ[gði[·éXgðINFÅú»(n_Í-1)
	route.clear();
	route.resize(node_n);
	for(int i=0; i<node_n; i++) { route[i] = INF; }
	route[start] = -1;
	
	// ÅZ£mèóÔð\·XgÌì¬
	vector<int> deci(node_n);
	for(int i=0; i<node_n; i++) { deci[i] = false; }

	// »ÝÌm[h
	int now_node;
	
	while(1)
	{
		// Å¬£Ìm[hðæ¾·é
		// úÌÅ¬lÍINFæèå«­
		now_node = -1;
		double shortest  = INF+1;
		for(int i=0; i<node_n; i++)
		{
			if(!deci[i] && shortest>dist[i])
			{
				shortest = dist[i];
				now_node = i;
			}
		}
		
		// ·×ÄÏÝÈç[vð²¯é
		if(now_node == -1) { break; }
		// »ÝÌm[hðmèÏÝÉ
		deci[now_node] = true;
		
		// »ÝÌm[h©çÌ¼Ì_Ì£ðvZ
		// mèÏÝÅ éi©gÅ éðÜÞjÚ±ªINFÅ éêÍ³
		// em[hÌÅZ£ðvZÊ©³ÌlÌ¬³¢ûÉÝè
		// ÅZHÅ Á½ê¼ÌÅZ[gðXV·é
		for(int i=0; i<node_n; i++)
		{
			if(connect[now_node][i]!=INF && !deci[i])
			{
				double tmp = dist[now_node]+connect[now_node][i];
				if(dist[i]>tmp)
				{
					dist[i] = tmp;
					route[i] = now_node;	
				}
			}
		}
	}

	return;
}

int main()
{
	stringstream ss;
	
	// üÍ
	int n,m,tmp;
	while(1)
	{
		cin >> n;
		if(n==0) { break; }	// 0ÅI¹

		// üÍirÌXgAÚ®Xgj
		// rÔÌÎMAPàì¬
		vector<vector<int> > b_data(n,vector<int>(3));
		map<int,int> bn_list;
		for(int i=0; i<n; i++)
		{
			cin >> b_data[i][0] >> b_data[i][1] >> b_data[i][2];
			bn_list[b_data[i][0]] = i;
		}
		cin >> m;
		vector<vector<int> > m_data(m,vector<int>(2));
		for(int i=0; i<m; i++)
		{
			cin >> m_data[i][0] >> m_data[i][1];
		}
		
		// AóÔð\·zñÌì¬ (AsÂ=INFA©gÆÌ£=0)
		vector<vector<double> > c_data(n,vector<double>(n));
		for(int i=0; i<n; i++)
		{
			for(int j=0; j<n; j++)
			{
				double dis = DIS(b_data[i][1]-b_data[j][1],b_data[i][2]-b_data[j][2]);
				if(dis <= 50)	{ c_data[i][j] = dis; }
				else		{ c_data[i][j] = INF; }
			}		
		}

		// Ú®f[^ÉvZ n_ðI_ðüêÖ¦
		// iHõÌÆ«­È¢Ù¤ÖÆ¾ÇêÎ
		// tÉÈéªüêÖ¦Ä¢é½ßûüÉÈé
		for(int i=0; i<m; i++)
		{
			Dijkstra(c_data,bn_list[m_data[i][1]]);
			
			int m_node = bn_list[m_data[i][0]];
			if(route[m_node] == INF)
			{
				ss << "NA" << endl;
			}
			else
			{
				for(; route[m_node]!=-1; m_node=route[m_node])
				{
					ss << b_data[m_node][0] << " ";
				}
				ss << b_data[m_node][0] << endl;
			}
		}
	}

	cout << ss.str();

	return 0;
}