#include <bits/stdc++.h>
using namespace std;
const int MaxN = 100010;
int N, T;
struct point {
  long long x, y;
  point() {}
  point(long long x, long long y) : x(x), y(y) {}
  void input() { cin >> x >> y; }
} p[MaxN * 2], q;
point operator-(const point &a, const point &b) {
  return point(a.x - b.x, a.y - b.y);
}
long long operator*(const point &a, const point &b) {
  return a.x * b.y - a.y * b.x;
}
bool out() {
  for (int i = 0; i < N; i++) {
    if ((p[i + 1] - p[i]) * (q - p[i]) > 0) {
      return 1;
    }
  }
  return 0;
}
void solve() {
  if (out()) {
    puts("0");
    return;
  }
  int idx = 0;
  long long ans = 0;
  for (int i = 0; i < N; i++) {
    while ((p[idx] - p[i]) * (q - p[i]) <= 0) idx++;
    ans += (long long)(idx - i - 1) * (idx - i - 2) / 2;
  }
  cout << (long long)N * (N - 1) * (N - 2) / 6 - ans << endl;
}
int main() {
  cin >> N;
  for (int i = 0; i < N; i++) {
    p[i].input();
    p[N + i] = p[i];
  }
  cin >> T;
  while (T--) {
    q.input();
    solve();
  }
  return 0;
}
