#include <bits/stdc++.h>
using namespace std;
const double EPS = 1e-8;
struct POINT {
  double x, y;
  POINT() {}
  POINT(double _x, double _y) : x(_x), y(_y) {}
  POINT operator-(const POINT &p) { return POINT(x - p.x, y - p.y); }
  POINT operator+(const POINT &p) { return POINT(x + p.x, y + p.y); }
  POINT operator/(double d) { return POINT(x / d, y / d); }
  double operator*(const POINT &p) { return x * p.y - y * p.x; }
  double operator&(const POINT &p) { return x * p.x + y * p.y; }
  double dis(const POINT &p) {
    return sqrt((x - p.x) * (x - p.x) + (y - p.y) * (y - p.y));
  }
  void input() { scanf("%lf%lf", &x, &y); }
} p[200005], c;
long long n, t;
int dmp(double k) {
  if (fabs(k) < EPS) return 0;
  return k < 0 ? -1 : 1;
}
void shuffle() {
  double ans = 0;
  for (int i = 0; i < n; i++) ans += p[i] * p[(i + 1) % n];
  if (ans < 0) {
    for (int i = 0; i < n / 2; i++) swap(p[i], p[n - i - 1]);
  }
}
int main() {
  while (scanf("%I64d", &n) == 1) {
    for (int i = 0; i < n; i++) p[i].input();
    shuffle();
    scanf("%I64d", &t);
    while (t--) {
      long long ans = (n * (n - 1) * (n - 2)) / 6;
      c.input();
      bool flag = 0;
      for (int i = 0; i < n; i++)
        if (dmp((p[i] - c) * (p[(i + 1) % n] - c)) <= 0) {
          flag = 1;
          break;
        }
      if (flag) {
        printf("0\n");
        continue;
      }
      for (int i = 0; i < n; i++) p[i + n] = p[i];
      long long k = 2;
      for (int i = 0; i < n; i++) {
        while (dmp((p[k] - p[i]) * (c - p[i])) > 0) k++;
        long long s = ((k - i - 1) * (k - i - 2)) / 2;
        ans -= s;
      }
      printf("%I64d\n", ans);
    }
  }
  return 0;
}
