#include <bits/stdc++.h>
using namespace std;
const int MaxN = 200005;
struct point {
  long long x, y;
} p[MaxN];
long long VP(point a, point b, point c) {
  return a.x * b.y + a.y * c.x + b.x * c.y - b.y * c.x - a.x * c.y - a.y * b.x;
}
long long r[MaxN];
long long pre[MaxN], suf[MaxN];
int n;
void inc(int &i) { i = (i + 1) % n; }
void dec(int &i) { i = (i - 1 + n) % n; }
long long diff(int i, int j) {
  if (i > j) return n - i + j;
  return i - j;
}
long long sum(int i, int j) {
  if (i > j) return suf[i] + pre[j];
  return pre[j] - (i ? pre[i - 1] : 0);
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%I64d %I64d", &p[i].x, &p[i].y);
  for (int i = 0; i < n / 2; i++) {
    point tmp = p[i];
    p[i] = p[n - i - 1];
    p[n - i - 1] = tmp;
  }
  int tt;
  scanf("%d", &tt);
  while (tt--) {
    point t;
    scanf("%I64d %I64d", &t.x, &t.y);
    bool out = false;
    for (int i = 0; i < n - 1; i++)
      if (VP(p[i], p[i + 1], t) < 0) out = true;
    if (out) {
      printf("0\n");
      continue;
    }
    memset(r, 0, sizeof(r));
    int j = 1, tmp = 1;
    for (int i = 0; i < n; i++) {
      for (inc(j); VP(p[i], p[j], t) > 0; inc(j)) tmp++;
      dec(j);
      r[i] = tmp--;
    }
    pre[0] = r[0];
    for (int i = 1; i < n; i++) pre[i] = pre[i - 1] + r[i];
    suf[n - 1] = r[n - 1];
    for (int i = n - 2; i >= 0; i--) suf[i] = suf[i + 1] + r[i];
    long long sol = 0;
    j = 1;
    for (int i = 0; i < n; i++) {
      for (inc(j); VP(p[i], p[j], t) > 0; inc(j))
        ;
      dec(j);
      int tmp = i;
      inc(tmp);
      sol += sum(tmp, j) - (r[i] - 1) * r[i] / 2;
    }
    printf("%I64d\n", sol / 3);
  }
  return 0;
}
