#include <bits/stdc++.h>
using namespace std;
const int MaxN = 200005;
struct Point {
  long long x, y;
  Point(long long x = 0, long long y = 0) : x(x), y(y) {}
  Point operator-(const Point& p) const { return Point(x - p.x, y - p.y); }
  long long operator*(const Point& p) const { return x * p.y - y * p.x; }
  void init() { scanf("%I64d%I64d", &x, &y); }
} p[MaxN], o;
int n;
long long xmult(const Point& p1, const Point& p2, const Point& p) {
  return (p1 - p) * (p2 - p);
}
int getP(int id) {
  int l = id + 1, r = id + n - 1, mid;
  while (l < r) {
    mid = l + r + 1 >> 1;
    if (xmult(o, p[mid], p[id]) > 0)
      l = mid;
    else
      r = mid - 1;
  }
  return l;
}
int main() {
  long long ret;
  int id, q;
  while (scanf("%d", &n) == 1) {
    for (int i = 0; i < n; i++) {
      p[i].init();
      p[i + n] = p[i];
    }
    scanf("%d", &q);
    while (q--) {
      o.init();
      ret = 0;
      for (int i = 0; !ret && i < n; i++) {
        if (xmult(o, p[i + 1], p[i]) < 0) ret = -1;
      }
      if (ret == -1) {
        puts("0");
        continue;
      }
      ret = (long long)n * (n - 1) * (n - 2) / 6;
      for (int i = 0; i < n; i++) {
        id = getP(i) - i;
        ret -= (long long)id * (id - 1) / 2;
      }
      printf("%I64d\n", ret);
    }
  }
  return 0;
}
