#include <bits/stdc++.h>
using namespace std;
int n, q;
int A[600006];
int gcd(int a, int b) { return !b ? a : gcd(b, a % b); }
map<pair<int, int>, int> M;
int L[600006], R[600006], lst[600006], cn;
struct que {
  int l, r, idx;
} Q[600006];
vector<int> bc[600006];
int T[600006];
void ad(int x, int c) {
  while (x <= cn) T[x] += c, x += (x & -x);
}
int sum(int x) {
  int ret = 0;
  while (x > 0) ret += T[x], x -= (x & -x);
  return ret;
}
int ans[600006];
void solve() {
  cin >> n;
  for (int i = (1), iend = (n); i <= iend; ++i) {
    int k;
    scanf("%d", &k);
    L[i] = cn + 1;
    int px, py, tx, ty, x, y, sx, sy;
    scanf("%d%d", &px, &py);
    sx = px, sy = py;
    for (int j = (1), jend = (k); j <= jend; ++j) {
      if (j != k)
        scanf("%d%d", &x, &y);
      else
        x = sx, y = sy;
      tx = x, ty = y;
      x -= px, y -= py;
      int g = gcd(abs(x), abs(y));
      x /= g, y /= g;
      ++cn;
      lst[cn] = M[make_pair(x, y)];
      bc[lst[cn]].push_back(cn);
      M[make_pair(x, y)] = cn;
      px = tx, py = ty;
    }
    R[i] = cn;
  }
  cin >> q;
  for (int i = (1), iend = (q); i <= iend; ++i) {
    int l, r;
    scanf("%d%d", &l, &r);
    l = L[l], r = R[r];
    Q[i] = (que){l, r, i};
  }
  sort(Q + 1, Q + 1 + q, [](que a, que b) { return a.l < b.l; });
  int cur = 1;
  for (int i = (0), iend = (cn); i <= iend; ++i) {
    while (cur <= q && Q[cur].l == i) {
      ans[Q[cur].idx] = sum(Q[cur].r) - sum(Q[cur].l - 1);
      ++cur;
    }
    for (int x : bc[i]) ad(x, 1);
  }
  for (int i = (1), iend = (q); i <= iend; ++i) printf("%d\n", ans[i]);
}
signed main() { solve(); }
