// Code by ajcxsu
// Problem: contain

#include<bits/stdc++.h>
using namespace std;

struct P {
    double x,y;
    P (double x=0.0, double y=0.0):x(x),y(y) {}

    P operator + (const P &b) { return P(x+b.x, y+b.y); }
    P operator - (const P &b) { return P(x-b.x, y-b.y); }

    double norm() { return x*x+y*y; }
    double abs() { return sqrt(norm()); }
} ;
typedef P Vector;

double dot(P x, P y) { return x.x*y.x+x.y*y.y; }
double cross(P a, P b) { return a.x*b.y-a.y*b.x; }

typedef vector<P> Polygon;

istream& operator >>(istream &in, P &a) {
    in>>a.x>>a.y;
    return in;
}

ostream& operator <<(ostream &out, P a) {
    out<<a.x<<' '<<a.y;
    return out;
}
#define EPS 1e-9

int contain(P x, Polygon &S) {
    bool res=0;
    for(int i=1, len=S.size(); i<len;i++) {
        Vector a=S[i-1]-x, b=S[i]-x;
        if(fabs(cross(a,b))<EPS && dot(a,b)<EPS) return 1;
        if(a.y>b.y) swap(a,b);
        if(a.y<EPS && b.y>EPS && cross(a,b)>EPS) res=!res;
    }
    return res?2:0;
}

Polygon S;
int n;

int main() {
    ios::sync_with_stdio(false);
    cout.setf(ios::fixed);
    cout<<setprecision(10);
    cin>>n;
    P na;
    for(int i=0;i<n;i++) cin>>na,S.push_back(na);
    S.push_back(S[0]);
    int q;
    cin>>q;
    while(q--) {
        cin>>na;
        cout<<contain(na,S)<<endl;
    }
    return 0;
}

