#include <bits/stdc++.h>
using namespace std;
const int maxn = 100005;
struct node {
  long long x, y;
} point[maxn * 2];
int n, t;
long long cross(node& a, node& b, node& c) {
  long long x1 = b.x - a.x;
  long long y1 = b.y - a.y;
  long long x2 = c.x - a.x;
  long long y2 = c.y - a.y;
  return x1 * y2 - x2 * y1;
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    cin >> point[i].x >> point[i].y;
    point[i + n] = point[i];
  }
  scanf("%d", &t);
  while (t--) {
    node u;
    cin >> u.x >> u.y;
    bool flag = true;
    for (int i = 0; i < n - 1; i++) {
      if (cross(point[i], u, point[i + 1]) <= 0) {
        flag = false;
        break;
      }
    }
    if (!flag) {
      printf("0\n");
      continue;
    }
    long long ans = (long long)n * (n - 1) * (n - 2) / 6;
    int j = 2;
    for (int i = 0; i < n; i++) {
      while (cross(point[i], u, point[j]) > 0) j++;
      ans -= (long long)(j - i - 1) * (j - i - 2) / 2;
    }
    cout << ans << endl;
  }
  return 0;
}
