#include <bits/stdc++.h>
using namespace std;
long long fact[100005], modinv[100005];
long long b(long long a, long long p) {
  if (p == 0) return 1;
  if (p & 1) return (a * b(a, p - 1)) % 1000000007;
  long long m = b(a, p / 2);
  return (m * m) % 1000000007;
}
void set_fact(int n) {
  fact[0] = 1;
  modinv[0] = 1;
  for (int i = 1; i <= n; i++) {
    fact[i] = (fact[i - 1] * i) % 1000000007;
    modinv[i] = b(fact[i], 1000000007 - 2);
  }
}
long long nCr(int n, int r) {
  if (n < r) return 0;
  long long up = 1, down = 1;
  for (long long i = n; i >= n - r + 1; i--) {
    up *= i;
    down *= (n - i + 1);
  }
  return up / down;
}
long long cross(pair<int, int> &a, pair<int, int> &b) {
  return a.first * 1ll * b.second - a.second * 1ll * b.first;
}
bool is_cw(pair<int, int> &a, pair<int, int> &b, pair<int, int> &c) {
  pair<int, int> x = pair<int, int>(b.first - a.first, b.second - a.second);
  pair<int, int> y = pair<int, int>(c.first - a.first, c.second - a.second);
  return cross(x, y) <= 0;
}
int distance(int a, int b, int n) {
  if (a <= b)
    return b - a;
  else
    return b - a + n;
}
int main() {
  int n, k = 3;
  scanf("%d", &n);
  set_fact(n);
  pair<int, int> ara[n + 1];
  for (int i = 0; i < n; i++) cin >> ara[i].first >> ara[i].second;
  reverse(ara, ara + n);
  int t;
  scanf("%d", &t);
  while (t--) {
    pair<int, int> P;
    cin >> P.first >> P.second;
    int right = 0;
    int f = 0;
    long long ans = 0;
    int cnt = 0;
    for (int i = 0; i < n; i++) {
      while (is_cw(ara[i], P, ara[right])) {
        right = (right + 1) % n;
        cnt++;
        if (cnt > 3 * n) {
          f = 1;
          break;
        }
      }
      if (f) break;
      int d = distance(i, right, n);
      ans = (ans + nCr(d - 1, k - 1));
    }
    if (f) ans = nCr(n, k);
    ans = (nCr(n, k) - ans);
    cout << ans << endl;
  }
  return 0;
}
