#include <bits/stdc++.h>
using namespace std;
void prepare() {}
struct C {
  int x, y;
  C() {
    x = 0;
    y = 0;
  }
  C(int X, int Y) {
    x = X;
    y = Y;
  }
  C operator-(const C &b) const { return C(x - b.x, y - b.y); }
  long long operator*(const C &b) const {
    return (long long)x * b.y - (long long)y * b.x;
  }
  void get() { scanf("%d%d", &x, &y); }
};
const int MAXN = 101010;
C p[MAXN];
bool solve() {
  int i, n, T, t;
  scanf("%d", &n);
  for (i = 0; i < n; i++) p[i].get();
  scanf("%d", &T);
  long long res = 0;
  for (t = 0; t < T; t++) {
    C q;
    q.get();
    res = 0;
    for (i = 0; i < n; i++) {
      if ((q - p[i]) * (p[(i + 1) % n] - p[i]) < 0) break;
    }
    if (i < n) {
      cout << 0 << endl;
      continue;
    }
    int l, e;
    long long x;
    for (l = 0, e = 0; l < n; l++) {
      long long z;
      do {
        e = (e + 1) % n;
        z = (q - p[l]) * (p[e] - p[l]);
      } while ((z) > 0);
      e = (e + n - 1) % n;
      x = (e - l + 3 * n) % n;
      res += x * (x - 1) / 2;
      x = (l - (e + 1) + 3 * n) % n;
      res += x * (x - 1) / 2;
    }
    x = (long long)n * (n - 1) * (n - 2) / 6;
    res = x - res / 2;
    cout << res << endl;
  }
  return true;
}
int main() {
  prepare();
  solve();
  return 0;
}
