#include <bits/stdc++.h>
using namespace std;
struct point {
  long long x, y;
};
long long n;
struct point p[100100];
struct point q;
int t;
int orientation(struct point& p1, struct point& p2, struct point& p3) {
  long long o = (p2.y - p1.y) * (p3.x - p2.x) - (p2.x - p1.x) * (p3.y - p2.y);
  if (o == 0) return o;
  return o < 0 ? -1 : 1;
}
bool inside(struct point& q) {
  int o = orientation(p[0], p[1], q);
  for (int i = 1; i < n; i++)
    if (o * orientation(p[i], p[(i + 1) % n], q) <= 0) return false;
  return true;
}
int main() {
  scanf("%I64d", &n);
  for (int i = 0; i < n; i++) scanf("%I64d%I64d", &p[i].x, &p[i].y);
  scanf("%d", &t);
  while (t--) {
    scanf("%I64d%I64d", &q.x, &q.y);
    long long ans = 0;
    if (inside(q)) {
      ans = n * (n - 1) * (n - 2) / 6;
      for (int a = 0, b = 1; a < n; a++) {
        while (a != b && orientation(p[a], p[b], q) > 0) b = (b + 1) % n;
        long long nb = (b == a) ? 0 : (b - a - 1 + n) % n;
        ans -= nb * (nb - 1) / 2;
      }
    }
    printf("%I64d\n", ans);
  }
  return 0;
}
