#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;

int dx[6] = {0,1,1,0,-1,-1};
int dy[6] = {-1,-1,0,1,1,0};

// テァツつケテ」ツつッテ」ツδゥテ」ツつケ
struct P{
	int x, y;
	P(int x_, int y_){ x = x_; y = y_; }
	P(){ x = y = 0; }
	bool operator<(const P& p) const{
		return pair<int,int>(x, y) < pair<int,int>(p.x, p.y);
	}
	bool operator==(const P& p) const{
		return y == p.y && x == p.x;
	}
};

const int INF = 1e+8;
int n;
// rock.find( P(x,y) ) != rock.end() テ」ツ?ョテ」ツ?ィテ」ツ??(x,y) テ」ツ?ォテ・ツイツゥテ」ツ?古・ツュツ佚・ツ慊ィテ」ツ?凖」ツつ?
set<P> rock;
// memo.find( vector<P> snake ) != memo.end() テ」ツ?ョテ」ツ?ィテ」ツ??ティツ崢?」ツ?ョテァツ環カテヲツ??snake テ」ツ?ッテヲツ篠「テァツエツ「テヲツクツ暗」ツ?ソ
set<vector<P> > memo;
// ティツ崢?」ツ?ョテゥツ?ュテ」ツ?ョテ、ツスツ催ァツスツョテ」ツつ津」ツδ。テ」ツδ「
set<P> sp;
// ティツ崢?」ツ?ョテヲツャツ。テ」ツ?ョテァツ環カテヲツ?凝」ツつ津、ツクツ?ヲツ卍づァツ堋?」ツ?ォテ、ツソツ敕ヲツ個?
vector<vector<P> > next;

// テ、ツスツ催ァツスツョ p テ」ツ?ォテ・ツイツゥテ」ツ?古・ツュツ佚・ツ慊ィテ」ツ?凖」ツつ凝」ツ?凝」ツ?ゥテ」ツ??」ツ?凝ィツソツ氾」ツ??
bool is_rock(P p){
	return rock.find(p) != rock.end();
}

// ティツ崢?」ツ?ョテァツ環カテヲツ??snake テ」ツ?古ヲツ篠「テァツエツ「テヲツクツ暗」ツ?ソテ」ツ?凝」ツ?ゥテ」ツ??」ツ?凝ィツソツ氾」ツ??
bool is_visited(const vector<P>& snake){
	return memo.find( snake ) != memo.end();
}

// snake[pos] テ」ツつ津ァツァツサテ・ツ仰陛」ツ?陛」ツ?崚」ツつ?
void move(vector<P>& snake, int pos){
	if( pos >= n ){ // テヲツ慊?・ツセツ古」ツ?セテ」ツ?ァテ」ツ?療」ツつ嘉」ツ?ケテ」ツ?淌」ツ?ィテ」ツ??
		if( !is_visited(snake) ){ // テ」ツ?セテ」ツ??ヲツ篠「テァツエツ「テ」ツ?療」ツ?ヲテ」ツ??」ツ?ェテ」ツ??」ツ?ィテ」ツ??
			for(int i=0 ; i < n ; i++ ){
				for(int j = i+2 ; j < n ; j++ ){
					// テゥツ堋」テヲツ篠・テ」ツ?凖」ツつ凝ァツッツ?」ツ?古」ツ?づ」ツ?」テ」ツ?ヲテ」ツ?湘」ツ?」テ」ツ?、テ」ツ?湘」ツ?ィテ」ツ??
					if( snake[i] == snake[j] ){ 
						return ;
					}
					
					for(int k=0 ; k < 6 ; k++ ){
						if( snake[i].x == snake[j].x + dx[k] && snake[i].y == snake[j].y + dy[k] ){
							return;
						}
					}
				}
			}
			// テヲツャツ。テ」ツ?ォテ」ツつュテ」ツδ・テ」ツδシテ」ツ?ォテ・ツ?・テ」ツつ古」ツつ凝ァツ環カテヲツ??next
			next.push_back( snake );
		}
	}else{
		move(snake, pos+1);
		
		for(int i=0 ; i < 6 ; i++ ){
			snake[pos].x += dx[i];
			snake[pos].y += dy[i]; 
		
			if( !is_rock(snake[pos]) ){ // テ・ツイツゥテ」ツ?古・ツュツ佚・ツ慊ィテ」ツ?療」ツ?ェテ」ツ??」ツ?ィテ」ツ??
				bool flag = true;
				for(int j = pos-1 ; j <= pos+1 ; j += 2 ){
					if( j < 0 || n <= j ) continue;
					
					// テ・ツ可催・ツセツ古」ツ?ョテァツッツ?」ツ?古ァツケツ凝」ツ?古」ツ?」テ」ツ?ヲテ」ツ??」ツつ凝」ツ?凝」ツδ?」ツつァテ」ツδε」ツつッ
					bool is_connect = false;
					for(int k=0 ; k < 6 ; k++ ){
						if( snake[j].x == snake[pos].x + dx[k] && snake[j].y == snake[pos].y + dy[k] ){
							is_connect = true;
						}
					}
					if( !is_connect ){
						flag = false;
					}
				}
				if( flag ){ // テァツッツ?pos+1 テ」ツ?ッテ・ツ仰陛」ツ?凝」ツ?崚」ツ?ェテ」ツ??
					move(snake, pos+2);
				}
			}
			snake[pos].x -= dx[i];
			snake[pos].y -= dy[i];
		}
	}
}

bool is_goal(int gx, int gy){
	return sp.find( P(gx,gy) ) != sp.end();
}

int bfs(vector<P> start, int gx, int gy){
	memo.insert( start );
	queue<vector<P> > q;
	q.push( start );
	
	int res = 0;
	while( !q.empty() ){
		// m テ・ツ?凝・ツ渉姪」ツつ甘・ツ?コテ」ツ?療」ツ?ヲテヲツャツ。テ」ツ?ョテァツ環カテヲツ?凝」ツつ津」ツδ?」ツつァテ」ツδε」ツつッ
		res++;
		int m = q.size();
		for(int i=0 ; i < m ; i++ ){
			vector<P> snake = q.front();
			q.pop();
			
			next.clear();
			// テァツァツサテ・ツ仰陛」ツ?療」ツ?淌ヲツャツ。テ」ツ?ョテァツ環カテヲツ?凝」ツ?ッ next テ」ツ?ォテ・ツ?・テ」ツつ?
			move(snake, 0);
			
			// テヲツャツ。テ」ツ?ョテァツ環カテヲツ?凝」ツつ津」ツつュテ」ツδ・テ」ツδシテ」ツ?ォテ・ツ?・テ」ツつ古」ツ?ヲテ」ツδ。テ」ツδ「
			for(int i=0 ; i < next.size() ; i++ ){
				memo.insert( next[i] );
				q.push( next[i] );
				sp.insert( next[i][0] );
			}
		}
		
		// テ」ツつエテ」ツδシテ」ツδォテ」ツ?ョテ」ツ?ィテ」ツ??
		if( is_goal(gx, gy) ) break;
		/*set<vector<P> >::iterator it = memo.lower_bound(vector<P>(1, P(gx,gy)));
            if(it != memo.end() && (*it)[0] == P(gx,gy))
                break;*/
	}
	return res;
}

int main(){
	while( cin >> n, n ){
		// テ・ツ按敕ヲツ慊淌・ツ個?
		vector<P> snake(n);
		rock.clear();
		memo.clear();
		sp.clear();
		
		// テ・ツ?・テ・ツ環?
		for(int i=0 ; i < n ; i++ ){
			cin >> snake[i].x >> snake[i].y;
		}
		int k, gx, gy;
		cin >> k;
		for(int i=0 ; i < k ; i++ ){
			int x, y;
			cin >> x >> y;
			rock.insert( P(x,y) );
		}
		cin >> gx >> gy;
		
		// BFS テ」ツ?ァティツァツ」テ」ツつ津ヲツアツづ」ツつ?」ツつ?
		int ans = bfs(snake, gx, gy);
		// ティツァツ」テ」ツ?ョテ・ツ?コテ・ツ環?
		cout << ans << endl;
	}
}

Measured memory_bytes: 32568