#include <bits/stdc++.h>
#define all(x) begin(x), end(x)
typedef long long ll;
using namespace std;
#define rep(i, a, b) for (int i = a; i < (b); ++i)
#define trav(a, x) for (auto &a : x)
#define sz(x) (int)(x).size()
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
template <class T> int sgn(T x) { return (x > 0) - (x < 0); }
template <class T> struct Point {
typedef Point P;
T x, y;
explicit Point(T x = 0, T y = 0) : x(x), y(y) {}
bool operator<(P p) const { return tie(x, y) < tie(p.x, p.y); }
bool operator==(P p) const { return tie(x, y) == tie(p.x, p.y); }
P operator+(P p) const { return P(x + p.x, y + p.y); }
P operator-(P p) const { return P(x - p.x, y - p.y); }
P operator*(T d) const { return P(x * d, y * d); }
P operator/(T d) const { return P(x / d, y / d); }
T dot(P p) const { return x * p.x + y * p.y; }
T cross(P p) const { return x * p.y - y * p.x; }
T cross(P a, P b) const { return (a - *this).cross(b - *this); }
T dist2() const { return x * x + y * y; }
double dist() const { return sqrt((double)dist2()); }
// angle to x-axis in interval [-pi, pi]
double angle() const { return atan2(y, x); }
P unit() const { return *this / dist(); } // makes dist()=1
P perp() const { return P(-y, x); } // rotates +90 degrees
P normal() const { return perp().unit(); }
// returns point rotated 'a' radians ccw around the origin
P rotate(double a) const { return P(x * cos(a) - y * sin(a), x * sin(a) + y * cos(a)); }
};
template <class P> bool onSegment(P s, P e, P p) { return p.cross(s, e) == 0 && (s - p).dot(e - p) <= 0; }
template <class P> bool inPolygon(vector<P> &p, P a, bool strict = true) {
int cnt = 0, n = sz(p);
rep(i, 0, n) {
P np = p[(i + 1) % n];
if (onSegment(p[i], np, a))
return !strict;
// or: if (segDist(p[i], np, a) <= eps) return !strict;
cnt += ((a.y >= np.y) - (a.y >= p[i].y)) * a.cross(p[i], np) > 0;
}
return cnt & 1;
}
typedef Point<ll> P;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
while (true) {
cin >> N;
if (N == 0) {
break;
}
vector<P> poly;
for (int i = 0; i < N; i++) {
P a;
cin >> a.x >> a.y;
poly.push_back(a);
}
int M;
cin >> M;
for (int i = 0; i < M; i++) {
P a;
cin >> a.x >> a.y;
auto resa = inPolygon(poly, a, true), resb = inPolygon(poly, a, false);
if (resa != resb)
cout << "on" << endl;
else
cout << (resa ? "in" : "out") << endl;
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGFsbCh4KSBiZWdpbih4KSwgZW5kKHgpCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSByZXAoaSwgYSwgYikgZm9yIChpbnQgaSA9IGE7IGkgPCAoYik7ICsraSkKI2RlZmluZSB0cmF2KGEsIHgpIGZvciAoYXV0byAmYSA6IHgpCiNkZWZpbmUgc3ooeCkgKGludCkoeCkuc2l6ZSgpCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LCBpbnQ+IHBpaTsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKCnRlbXBsYXRlIDxjbGFzcyBUPiBpbnQgc2duKFQgeCkgeyByZXR1cm4gKHggPiAwKSAtICh4IDwgMCk7IH0KdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBQb2ludCB7CiAgICB0eXBlZGVmIFBvaW50IFA7CiAgICBUIHgsIHk7CiAgICBleHBsaWNpdCBQb2ludChUIHggPSAwLCBUIHkgPSAwKSA6IHgoeCksIHkoeSkge30KICAgIGJvb2wgb3BlcmF0b3I8KFAgcCkgY29uc3QgeyByZXR1cm4gdGllKHgsIHkpIDwgdGllKHAueCwgcC55KTsgfQogICAgYm9vbCBvcGVyYXRvcj09KFAgcCkgY29uc3QgeyByZXR1cm4gdGllKHgsIHkpID09IHRpZShwLngsIHAueSk7IH0KICAgIFAgb3BlcmF0b3IrKFAgcCkgY29uc3QgeyByZXR1cm4gUCh4ICsgcC54LCB5ICsgcC55KTsgfQogICAgUCBvcGVyYXRvci0oUCBwKSBjb25zdCB7IHJldHVybiBQKHggLSBwLngsIHkgLSBwLnkpOyB9CiAgICBQIG9wZXJhdG9yKihUIGQpIGNvbnN0IHsgcmV0dXJuIFAoeCAqIGQsIHkgKiBkKTsgfQogICAgUCBvcGVyYXRvci8oVCBkKSBjb25zdCB7IHJldHVybiBQKHggLyBkLCB5IC8gZCk7IH0KICAgIFQgZG90KFAgcCkgY29uc3QgeyByZXR1cm4geCAqIHAueCArIHkgKiBwLnk7IH0KICAgIFQgY3Jvc3MoUCBwKSBjb25zdCB7IHJldHVybiB4ICogcC55IC0geSAqIHAueDsgfQogICAgVCBjcm9zcyhQIGEsIFAgYikgY29uc3QgeyByZXR1cm4gKGEgLSAqdGhpcykuY3Jvc3MoYiAtICp0aGlzKTsgfQogICAgVCBkaXN0MigpIGNvbnN0IHsgcmV0dXJuIHggKiB4ICsgeSAqIHk7IH0KICAgIGRvdWJsZSBkaXN0KCkgY29uc3QgeyByZXR1cm4gc3FydCgoZG91YmxlKWRpc3QyKCkpOyB9CiAgICAvLyBhbmdsZSB0byB4LWF4aXMgaW4gaW50ZXJ2YWwgWy1waSwgcGldCiAgICBkb3VibGUgYW5nbGUoKSBjb25zdCB7IHJldHVybiBhdGFuMih5LCB4KTsgfQogICAgUCB1bml0KCkgY29uc3QgeyByZXR1cm4gKnRoaXMgLyBkaXN0KCk7IH0gLy8gbWFrZXMgZGlzdCgpPTEKICAgIFAgcGVycCgpIGNvbnN0IHsgcmV0dXJuIFAoLXksIHgpOyB9ICAgICAgIC8vIHJvdGF0ZXMgKzkwIGRlZ3JlZXMKICAgIFAgbm9ybWFsKCkgY29uc3QgeyByZXR1cm4gcGVycCgpLnVuaXQoKTsgfQogICAgLy8gcmV0dXJucyBwb2ludCByb3RhdGVkICdhJyByYWRpYW5zIGNjdyBhcm91bmQgdGhlIG9yaWdpbgogICAgUCByb3RhdGUoZG91YmxlIGEpIGNvbnN0IHsgcmV0dXJuIFAoeCAqIGNvcyhhKSAtIHkgKiBzaW4oYSksIHggKiBzaW4oYSkgKyB5ICogY29zKGEpKTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIFA+IGJvb2wgb25TZWdtZW50KFAgcywgUCBlLCBQIHApIHsgcmV0dXJuIHAuY3Jvc3MocywgZSkgPT0gMCAmJiAocyAtIHApLmRvdChlIC0gcCkgPD0gMDsgfQoKdGVtcGxhdGUgPGNsYXNzIFA+IGJvb2wgaW5Qb2x5Z29uKHZlY3RvcjxQPiAmcCwgUCBhLCBib29sIHN0cmljdCA9IHRydWUpIHsKICAgIGludCBjbnQgPSAwLCBuID0gc3oocCk7CiAgICByZXAoaSwgMCwgbikgewogICAgICAgIFAgbnAgPSBwWyhpICsgMSkgJSBuXTsKICAgICAgICBpZiAob25TZWdtZW50KHBbaV0sIG5wLCBhKSkKICAgICAgICAgICAgcmV0dXJuICFzdHJpY3Q7CiAgICAgICAgLy8gb3I6IGlmIChzZWdEaXN0KHBbaV0sIG5wLCBhKSA8PSBlcHMpIHJldHVybiAhc3RyaWN0OwogICAgICAgIGNudCArPSAoKGEueSA+PSBucC55KSAtIChhLnkgPj0gcFtpXS55KSkgKiBhLmNyb3NzKHBbaV0sIG5wKSA+IDA7CiAgICB9CiAgICByZXR1cm4gY250ICYgMTsKfQoKdHlwZWRlZiBQb2ludDxsbD4gUDsKCnNpZ25lZCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCk7CiAgICBjaW4udGllKDApOwogICAgaW50IE47CiAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIGNpbiA+PiBOOwogICAgICAgIGlmIChOID09IDApIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHZlY3RvcjxQPiBwb2x5OwogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgICAgIFAgYTsKICAgICAgICAgICAgY2luID4+IGEueCA+PiBhLnk7CiAgICAgICAgICAgIHBvbHkucHVzaF9iYWNrKGEpOwogICAgICAgIH0KICAgICAgICBpbnQgTTsKICAgICAgICBjaW4gPj4gTTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE07IGkrKykgewogICAgICAgICAgICBQIGE7CiAgICAgICAgICAgIGNpbiA+PiBhLnggPj4gYS55OwogICAgICAgICAgICBhdXRvIHJlc2EgPSBpblBvbHlnb24ocG9seSwgYSwgdHJ1ZSksIHJlc2IgPSBpblBvbHlnb24ocG9seSwgYSwgZmFsc2UpOwogICAgICAgICAgICBpZiAocmVzYSAhPSByZXNiKQogICAgICAgICAgICAgICAgY291dCA8PCAib24iIDw8IGVuZGw7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGNvdXQgPDwgKHJlc2EgPyAiaW4iIDogIm91dCIpIDw8IGVuZGw7CiAgICAgICAgfQogICAgfQp9