#include <bits/stdc++.h>
using namespace std;
int n, q;
int gcd(int a, int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
struct Line {
  int a;
  int b;
  int c;
  Line(int x, int y, int dx, int dy) {
    a = -dy;
    b = dx;
    c = a * x + b * y;
    int d = gcd(abs(a), gcd(abs(b), abs(c)));
    a /= d;
    b /= d;
    c /= d;
    if (a < 0) {
      a = -a;
      b = -b;
      c = -c;
    }
    if (a == 0 && b < 0) {
      a = -a;
      b = -b;
      c = -c;
    }
  }
  bool in(int x1, int y1) const { return (a * x1 + b * y1 == c); }
  friend bool operator<(const Line &a, const Line &b) {
    if (a.a == b.a && a.b == b.b) return (a.c < b.c);
    if (a.a == b.a) return (a.b < b.b);
    return (a.a < b.a);
  }
  friend bool operator==(const Line &a, const Line &b) {
    return ((a.a == b.a) && (a.b == b.b) && (a.c == b.c));
  }
};
pair<int, int> pt[201];
vector<int> hits[40001];
vector<Line> lines;
vector<Line> nLines;
double small[201];
vector<vector<double>> mult(vector<vector<double>> a,
                            vector<vector<double>> b) {
  vector<vector<double>> ret(a.size(), vector<double>(b[0].size()));
  if (a[0].size() != b.size()) return ret;
  for (int i = 1; i < a.size(); i++)
    for (int j = 1; j < b[0].size(); j++)
      for (int k = 1; k < b.size(); k++) ret[i][j] += a[i][k] * b[k][j];
  return ret;
}
int pow2(int a) { return (1 << a); }
vector<vector<double>> binMat[15];
int main() {
  cout << setprecision(20);
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> pt[i].first >> pt[i].second;
  for (int i = 1; i <= n; i++)
    for (int j = i + 1; j <= n; j++) {
      int x1 = pt[i].first;
      int y1 = pt[i].second;
      int x2 = pt[j].first;
      int y2 = pt[j].second;
      lines.push_back(Line(x1, y1, (x1 - x2), (y1 - y2)));
    }
  sort(lines.begin(), lines.end());
  nLines.push_back(lines[0]);
  for (int i = 1; i < lines.size(); i++)
    if (!(lines[i] == lines[i - 1])) nLines.push_back(lines[i]);
  for (int i = 0; i < nLines.size(); i++) {
    auto e = nLines[i];
    for (int j = 1; j <= n; j++) {
      int x = pt[j].first;
      int y = pt[j].second;
      if (e.in(x, y)) hits[i].push_back(j);
    }
  }
  vector<vector<double>> to(n + 1, vector<double>(n + 1));
  vector<vector<double>> from(n + 1, vector<double>(n + 1));
  for (int i = 1; i <= n; i++) small[i] = n + 1;
  for (int i = 1; i <= n; i++) {
    int x = pt[i].first;
    int y = pt[i].second;
    int cnt = 0;
    for (int j = 0; j < nLines.size(); j++) {
      auto e = nLines[j];
      if (e.in(x, y)) cnt++;
    }
    for (int j = 0; j < nLines.size(); j++) {
      auto e = nLines[j];
      if (!e.in(x, y)) continue;
      small[i] = min(small[i], (double)hits[j].size());
      for (int u : hits[j]) {
        to[i][u] += 1.0 / (cnt * hits[j].size());
      }
    }
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++) from[i][j] = to[j][i];
  binMat[0] = from;
  for (int i = 1; i <= 14; i++) binMat[i] = mult(binMat[i - 1], binMat[i - 1]);
  cin >> q;
  while (q--) {
    int t, m;
    cin >> t >> m;
    m--;
    if (true) {
      vector<vector<double>> vec(2, vector<double>(n + 1));
      vec[1][t] = 1;
      for (int i = 14; i >= 0; i--) {
        if (m >= pow2(i)) {
          vec = mult(vec, binMat[i]);
          m -= pow2(i);
        }
      }
      double ans = 0;
      for (int i = 0; i < nLines.size(); i++) {
        double cur = 0;
        for (auto e : hits[i]) cur += vec[1][e];
        cur /= hits[i].size();
        ans = max(ans, cur);
      }
      cout << ans << '\n';
    }
  }
  return 0;
}
