#include <iostream>
#include <algorithm>
#include <cmath>
#include <vector>

struct bill{int n, x, y;};

std::vector<int> dijkstra(int, int);
double len[1001][1001];
const double INF = 10000000;

int main(){
	int n;
	while(std::cin >> n, n){
		for(int i=1;i<1001;i++)
		 	for(int j=1;j<1001;j++)
		 		len[i][j] = INF;

		std::vector<bill> bs;
		for(int i=n;i;i--){
			bill b;
			std::cin >> b.n >> b.x >> b.y;
			bs.push_back(b);
		}

		for(int i=0;i<bs.size()-1;i++){
			for(int j=i+1;j<bs.size();j++){
				double x = bs[i].x-bs[j].x, y = bs[i].y-bs[j].y, dist = sqrt(x*x+y*y);
				if(dist <= 50){
					len[bs[i].n][bs[j].n] = dist;
					len[bs[j].n][bs[i].n] = dist;
				}
			}
		}

		int m;
		std::cin >> m;
		for(;m;m--){
			int start, end;
			std::cin >> start >> end;
			std::vector<int> res = dijkstra(start, end);
			if(res[0] == -1)std::cout << "NA\n";
			else{
				for(int i=0;i<res.size();i++){
					std::cout << res[i] << (i+1-res.size()?" ":"\n");
				}
			}
		}
	}
}

std::vector<int> dijkstra(int s, int e){
	double dist[1001]; int used[1001]; int prev[1001];
	std::fill(dist, dist+1001, INF);
	std::fill(used, used+1001, 0);

	dist[s] = 0;
	while(1){
		int v = -1;
		for(int u=1;u<1001;u++){
			if(!used[u] && (v==-1 || dist[u]<dist[v]))v=u;
		}
		if(v == -1)break;
		used[v] = 1;
		for(int u=1;u<1001;u++){
			if(dist[u] > dist[v]+len[v][u])
				dist[u] = dist[v]+len[v][u], prev[u] = v;
		}
	}
	std::vector<int> res;
	if(dist[e] == INF)res.push_back(-1);
	else{
		res.push_back(e);
		int v = e;
		while(v != s){
			v = prev[v];
			res.push_back(v);
		}
		std::reverse(res.begin(), res.end());
		return res;
	}
}