#include <bits/stdc++.h>
using namespace std;
struct Point {
  long long x, y;
  Point operator-(const Point &t) const { return {x - t.x, y - t.y}; }
};
inline long long cross(Point a, Point b) { return a.x * b.y - a.y * b.x; }
inline long long ccw(Point a, Point b, Point c) { return cross(b - a, c - a); }
const int MAXN = 1e5 + 50;
Point p[2 * MAXN];
int n;
bool isInside(Point t) {
  bool yin = false, yang = false;
  for (int i = 0; i < n; i++) {
    if (ccw(t, p[i], p[(i + 1) % n]) < 0)
      yin = true;
    else
      yang = true;
  }
  return !(yin && yang);
}
long long solve(Point t) {
  if (!isInside(t)) return 0;
  long long cnt = 0;
  int li = 0, ri = 0;
  for (int i = 0; i < n; i++) {
    while (ccw(p[i], p[li + 1], t) > 0) li++;
    while (ccw(p[i], p[ri], t) >= 0) ri++;
    long long lcnt = li - i, rcnt = i - ri;
    if (lcnt < 0) lcnt += n;
    if (rcnt < 0) rcnt += n;
    cnt += lcnt * rcnt;
  }
  return (cnt - ((long long)n * (n - 1) * (n - 2) / 6)) / 2;
}
int main() {
  cin >> n;
  for (int i = n - 1; i >= 0; i--) cin >> p[i].x >> p[i].y;
  for (int i = 0; i < n; i++) p[n + i] = p[i];
  int q;
  cin >> q;
  while (q--) {
    long long a, b;
    cin >> a >> b;
    cout << solve({a, b}) << endl;
  }
}
