#include <bits/stdc++.h>
using namespace std;
struct pp {
  int x, y;
} point[100005];
inline long long f(int a, int b, int n) {
  if (b > a) return (long long)(b - a) * (b - a - 1) / 2;
  return (long long)(b + n - a) * (b + n - a - 1) / 2;
}
bool check(int n, int x, int y) {
  for (int i = 0; i < n; i++) {
    long long xx =
        (long long)(x - point[i].x) * (point[(i + 1) % n].y - point[i].y) -
        (long long)(y - point[i].y) * (point[(i + 1) % n].x - point[i].x);
    if (xx < 0) return false;
  }
  return true;
}
int main() {
  int n;
  int i, j, k, t;
  cin >> n;
  for (i = 0; i < n; i++) cin >> point[i].x >> point[i].y;
  for (cin >> t; t; t--) {
    int px, py;
    cin >> px >> py;
    if (!check(n, px, py)) {
      cout << "0\n";
      continue;
    }
    long long total = (long long)n * (n - 1) / 2 * (n - 2) / 3;
    int a = 0, b = 1;
    for (b = 1; b; b = (b + 1) % n) {
      long long x = (long long)(px - point[a].x) * (point[b].y - point[a].y) -
                    (long long)(py - point[a].y) * (point[b].x - point[a].x);
      if (x <= 0) break;
    }
    b--;
    if (b == 0 || b == -1) {
      cout << "0\n";
      continue;
    }
    long long tmp = f(a, b, n);
    for (a = 1; a < n; a++) {
      for (b = (b + 1) % n;; b = (b + 1) % n) {
        long long x = (long long)(px - point[a].x) * (point[b].y - point[a].y) -
                      (long long)(py - point[a].y) * (point[b].x - point[a].x);
        if (x <= 0) break;
      }
      b = (b + n - 1) % n;
      tmp += f(a, b, n);
    }
    cout << total - tmp << "\n";
  }
  return 0;
}
