#include <bits/stdc++.h>
using namespace std;
int cond = 1;
complex<long long> poly[3 * 1000000];
complex<long long> queries[44];
int n, t;
int move(int start, int sec, complex<long long> pp) {
  if (sec <= start) sec = start + 1;
  while (true) {
    complex<long long> v1 = poly[sec] - poly[start];
    complex<long long> v2 = pp - poly[start];
    complex<long long> q = v1 * conj(v2);
    if (imag(q) > 0) {
      sec++;
    } else {
      return sec;
    }
  }
}
long long licz(complex<long long> pp) {
  int start = 0;
  int sec = 1;
  long long res = 0;
  sec = move(start, sec, pp);
  while (start < n) {
    res += (long long)((long long)sec - start - 1) *
           ((long long)sec - start - 2) / 2;
    start++;
    sec = move(start, sec, pp);
  };
  return res;
};
bool is_inside(complex<long long> pp) {
  for (int i = 0; i < n; ++i) {
    complex<long long> v1 = pp - poly[i];
    complex<long long> v2 = poly[i + 1] - poly[i];
    complex<long long> q = v2 * conj(v1);
    if (imag(q) <= 0) return false;
  };
  return true;
};
int main() {
  scanf("%d", &n);
  long long nn = (long long)n;
  long long all_triangles = (nn * (nn - 1) * (nn - 2)) / (3LL * 2LL);
  for (int i = 0; i < n; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    poly[i] = complex<long long>((long long)x, (long long)y);
    poly[i + n] = poly[i];
    poly[i + 2 * n] = poly[i];
  }
  scanf("%d", &t);
  for (int i = 0; i < t; ++i) {
    int x, y;
    scanf("%d %d", &x, &y);
    queries[i] = complex<long long>((long long)x, (long long)y);
    if (is_inside(queries[i])) {
      printf("%I64d\n", all_triangles - licz(queries[i]));
    } else {
      printf("0\n");
    }
  };
  return 0;
}
