#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 1;
int n;
bool LessThanOrEqual(double a, double b) {
  return fabs(a - b) <= 1e-6 || a < b;
}
struct point {
  double x, y;
  point(double a = 0, double b = 0) {
    x = a;
    y = b;
  }
  void sc() { scanf("%lf%lf", &x, &y); }
  double ang() { return atan2(y, x); }
  double angdeg() {
    double ret = 180 * atan2(y, x) / acos(-1);
    if (ret < 0) ret += 360;
    return ret;
  }
  point normal() { return point(x / len(), y / len()); }
  double len() { return sqrt(y * y + x * x); }
  point operator+(const point &a) { return point(x + a.x, y + a.y); }
  point operator-(const point &a) { return point(x - a.x, y - a.y); }
  double operator*(const point &a) { return a.x * x + a.y * y; }
  double operator^(const point &a) { return x * a.y - a.x * y; }
  bool operator<(point b) {
    if (x != b.x) return x < b.x;
    return y < b.y;
  }
  double dis(point a) {
    return sqrt((x - a.x) * (x - a.x) + (y - a.y) * (y - a.y));
  }
  point mid(point a) { return point((a.x + x) / 2, (a.y + y) / 2); }
} a[N];
bool InTriangle(point a, point b, point c, point d) {
  return ((b - a) ^ (d - a)) <= 0 && ((c - b) ^ (d - b)) <= 0 &&
         ((a - c) ^ (d - c)) <= 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) a[i].sc();
  int T;
  scanf("%d", &T);
  while (T--) {
    long long ans = n * (n - 1LL) * (n - 2) / 6;
    point at;
    at.sc();
    int l = 1, r = n - 1, in = -1;
    while (l <= r) {
      int mid = (l + r) / 2;
      if (((a[mid] - a[0]) ^ (at - a[0])) <= 0)
        in = mid, l = mid + 1;
      else
        r = mid - 1;
    }
    if (in == -1 || in == n - 1 || !InTriangle(a[0], a[in], a[in + 1], at)) {
      puts("0");
      continue;
    }
    for (int i = 0, r = 0, sum = 0; i < n; i++) {
      while (((a[(r + 1) % n] - a[i]) ^ (at - a[i])) <= 0) {
        sum++;
        r++;
        if (r == n) r = 0;
      }
      ans -= sum * (sum - 1LL) / 2;
      sum--;
    }
    cout << ans << endl;
  }
}
