For a given polygon g and target points t, print "2" if g contains t, "1" if t is on a segment of g, "0" otherwise.

g is represented by a sequence of points p1, p2,..., pn where line segments connecting pi and pi+1 (1 ≤ i ≤ n-1) are sides of the polygon. The line segment connecting pn and p1 is also a side of the polygon.

Note that the polygon is not necessarily convex.

Constraints

* 3 ≤ n ≤ 100
* 1 ≤ q ≤ 1000
* -10000 ≤ xi, yi ≤ 10000
* No point of the polygon will occur more than once.
* Two sides of the polygon can intersect only at a common endpoint.

Input

The entire input looks like:


g (the sequence of the points of the polygon)
q (the number of queris = the number of target points)
1st query
2nd query
:
qth query


g is given by coordinates of the points p1,..., pn in the following format:


n
x1 y1
x2 y2
:
xn yn


The first integer n is the number of points. The coordinate of a point pi is given by two integers xi and yi. The coordinates of points are given in the order of counter-clockwise visit of them.

Each query consists of the coordinate of a target point t. The coordinate is given by two intgers x and y.

Output

For each query, print "2", "1" or "0".

Example

Input

4
0 0
3 1
2 3
0 3
3
2 1
0 2
3 2


Output

2
1
0
#include <cstdio>
#include <math.h>

 
int main() {
	double xs[101],ys[101],rs[10001];
	int n,ans[10001];
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%lf %lf",&xs[i],&ys[i]);
 	}
	int q;
	scanf("%d",&q);
	for(int i=0;i<q;i++){
		double gx,gy,R=0;
		scanf("%lf %lf",&gx,&gy);
		bool isPeriphery=false;
		for(int j=0;j<n;j++){
			int p1=j;
			int p2=(j+1)%n;
			double dx1,dy1,dx2,dy2,len1,len2;
			dx1=xs[p1]-gx;
			dy1=ys[p1]-gy;
			dx2=xs[p2]-gx;
			dy2=ys[p2]-gy;
			len1=hypot(dx1,dy1);
			len2=hypot(dx2,dy2);
			double gaiseki=dx1*dy2-dx2*dy1;
			double naiseki=dx1*dx2+dy1*dy2;
 			
			if(naiseki<=0&&gaiseki==0){
				isPeriphery=true;
			}else{
				double aSinVal,sinVal;
				
			if(len1*len2>0){
					sinVal=gaiseki/(len1*len2);
				}else{
					isPeriphery=true;
					break;
				}
				if(sinVal<-1)sinVal=-1;
				if(sinVal>1)sinVal=1;
 				aSinVal=asin(sinVal);
				if(gaiseki>0){
					if(naiseki>=0)R+=aSinVal;
					else R+=M_PI-aSinVal;
				}else{
					if(naiseki>=0)R+=aSinVal;
					else R+=-aSinVal-M_PI;
				}
			}
 		}
		
		int type;
		if(fabs(R-M_PI*2)<0.0001){
			type=2;
		}else{
			type=0;
		}
 
		if(isPeriphery==true){
			type=1;
		}
		rs[i]=R;
		ans[i]=type;
	}
 	for(int i=0;i<q;i++){
		printf("%d\n",ans[i]);
	}
}
