#include using namespace std; #define maxn 500 #define inf 10000001 int g[maxn][maxn],dist[maxn][maxn]; int n,m; struct node { int x; int y; }houses[maxn],defenders[maxn]; void clearset(int n) { for(int i = 0;i < n;i++) for(int j = 0;j < n;j++) { g[i][j] = inf; dist[i][j] = inf; } } int floyd(int n) { int minn = inf; for(int k = 0;k < n;k++) { for(int i = 0;i < k;i++) { if (g[i][k] == inf) continue; for(int j = 0;j < k;j++) { minn=min(minn,g[i][k] + g[k][j] + dist[j][i]); } } for(int i = 0;i < n;i++) { if (dist[i][k] == inf) continue; for(int j=0;j a.x && temp.x > b.x) || (temp.x < a.x && temp.x < b.x)) return false; } } return true; } int main() { while(scanf("%d",&n) != EOF) { int x,y; for(int i = 0;i < n;i++) scanf("%d%d",&houses[i].x,&houses[i].y); scanf("%d",&m); for(int i = 0;i < m;i++) scanf("%d%d",&defenders[i].x,&defenders[i].y); clearset(m); for(int i = 0;i < m;i++) for(int j = 0;j < m;j++) { if (judge(defenders[i],defenders[j])) g[i][j] = dist[i][j]=1; } int r = m-floyd(m);; if (r >= 0) cout<