#include <bits/stdc++.h>
#pragma optimization_level 3
using namespace std;
long double TL = 1.0;
bool is_tl = 0;
long long CALLS = 0;
inline bool IS() {
  if (++CALLS == 1000) {
    CALLS = 0;
    is_tl |= clock() > (TL - 0.1) * CLOCKS_PER_SEC;
  }
  return is_tl;
}
template <typename T>
inline void amin(T &a, T b) {
  if (a > b) a = b;
}
template <typename T>
inline void amax(T &a, T b) {
  if (a < b) a = b;
}
template <typename T>
inline void print(T a) {
  for (auto U : a) cout << U << ' ';
  cout << '\n';
}
const long long N = 1e5 + 7, NS = 1e3 + 7, lg = 18, sq = 550, inf = 1e9 + 7,
                mod = 1e9 + 7, SM = 1e2 + 7;
const long double eps = 1e-9;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
long long sign(long double x) {
  if (x < -eps) return -1;
  if (x > eps) return 1;
  return 0;
}
struct pt {
  long double x;
  long double y;
};
struct v {
  long double x;
  long double y;
};
long double operator*(v v1, v v2) { return v1.x * v2.x + v1.y * v2.y; }
long double operator^(v v1, v v2) { return v1.x * v2.y - v1.y * v2.x; }
v tov(pt p1, pt p2) {
  v v1;
  v1.x = p2.x - p1.x;
  v1.y = p2.y - p1.y;
  return v1;
}
struct line {
  long double a;
  long double b;
  long double c;
  line(){};
  line(long double _a, long double _b, long double _c) {
    a = _a;
    b = _b;
    c = _c;
  }
  long double get(pt p) { return p.x * a + p.y * b + c; }
};
line getline(pt p1, pt p2) {
  line l = {p2.y - p1.y, p1.x - p2.x,
            -(p1.x * (p2.y - p1.y) + p1.y * (p1.x - p2.x))};
  return l;
}
pt p[N];
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  long long n;
  cin >> n;
  for (long long i = 0; i < n; i++) {
    cin >> p[i].x >> p[i].y;
  }
  long long _;
  cin >> _;
  while (_--) {
    pt s;
    cin >> s.x >> s.y;
    long long j = 1, ans = (n * (n - 1) * (n - 2)) / 6, f = 0;
    long double sum = 0;
    for (long long i = 0; i < n; i++) {
      sum += abs(tov(s, p[i]) ^ (tov(s, p[(i + 1) % n])));
    }
    for (long long i = 0; i < n; i++) {
      sum -= abs(tov(p[0], p[i]) ^ (tov(p[0], p[(i + 1) % n])));
    }
    if (sum != 0)
      cout << 0 << '\n';
    else {
      for (long long i = 0; i < n; i++) {
        line l = getline(p[i], s);
        if (i == j) j = (j + 1) % n;
        while (sign(l.get(p[(j + 1) % n])) == sign(l.get(p[j]))) {
          j = (1 + j) % n;
        }
        long long cur = j - i;
        if (cur < 0) cur += n;
        ans -= (cur * (cur - 1)) / 2;
      }
      cout << ans << '\n';
    }
  }
}
