#include <bits/stdc++.h>
using namespace std;
const int maxn = 4e4 + 50;
const int N = 202;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
struct matrix {
  double mat[N][N];
};
matrix mul(const matrix& a, const matrix& b, int r, int c) {
  matrix ans;
  for (int i = 1; i <= r; ++i) {
    for (int j = 1; j <= c; ++j) {
      ans.mat[i][j] = 0;
      for (int k = 1; k <= r; ++k) ans.mat[i][j] += a.mat[i][k] * b.mat[k][j];
    }
  }
  return ans;
}
struct Line {
  int A, B, C;
  Line(int a = 0, int b = 0, int c = 0) : A(a), B(b), C(c) {}
  Line(pair<int, int> a, pair<int, int> b) {
    A = a.second - b.second;
    B = b.first - a.first;
    C = a.first * b.second - b.first * a.second;
  }
  bool pa(pair<int, int> a) { return A * a.first + B * a.second + C == 0; }
} line[maxn];
int tol;
int has[maxn];
double own[maxn];
pair<int, int> po[N];
int pass[N];
int vis[N][N];
matrix use[60];
int fuck[N];
vector<int> bel[N];
void check(int pos, int n) {
  int cc = 0;
  for (int i = 1; i <= n; ++i) {
    if (line[pos].pa(po[i])) fuck[++cc] = i;
  }
  has[pos] = cc;
  for (int i = 1; i <= cc; ++i) {
    ++pass[fuck[i]];
    own[fuck[i]] += 1 / (double)cc;
    bel[fuck[i]].push_back(pos);
  }
  for (int i = 1; i <= cc; ++i)
    for (int j = i + 1; j <= cc; ++j) {
      vis[fuck[i]][fuck[j]] = vis[fuck[j]][fuck[i]] = cc;
    }
}
double wa[maxn];
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  cout.setf(ios::fixed);
  int n;
  cin >> n;
  for (int i = 1; i <= n; ++i) cin >> po[i].first >> po[i].second;
  for (int i = 1; i <= n; ++i)
    for (int j = i + 1; j <= n; ++j)
      if (!vis[i][j]) {
        line[++tol] = Line(po[i], po[j]);
        check(tol, n);
      }
  memset(use[0].mat, 0, sizeof use[0].mat);
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= n; ++j)
      if (i != j) {
        use[0].mat[i][j] = 1.0 / (double)pass[i] / vis[i][j];
      }
  }
  for (int i = 1; i <= n; ++i) use[0].mat[i][i] = own[i] / pass[i];
  for (int i = 1; (1 << i) <= 10000; ++i) {
    use[i] = mul(use[i - 1], use[i - 1], n, n);
  }
  int Q;
  cin >> Q;
  while (Q--) {
    int t, m;
    cin >> t >> m;
    matrix tmp;
    for (int i = 1; i <= n; ++i) tmp.mat[i][1] = 0;
    tmp.mat[t][1] = 1;
    int gg = m - 1;
    for (int i = 0; gg; ++i) {
      if (gg & 1) tmp = mul(use[i], tmp, n, 1);
      gg >>= 1;
    }
    double ans = 0;
    for (int i = 1; i <= tol; ++i) wa[i] = 0;
    for (int i = 1; i <= n; ++i) {
      for (int j = 0; j < bel[i].size(); ++j) wa[bel[i][j]] += tmp.mat[i][1];
    }
    for (int i = 1; i <= tol; ++i) {
      wa[i] /= has[i];
      ans = max(ans, wa[i]);
    }
    tmp = mul(use[0], tmp, n, 1);
    for (int i = 1; i <= n; ++i) ans = max(ans, tmp.mat[i][1]);
    cout << setprecision(10) << ans << "\n";
  }
  return 0;
}
