#include <bits/stdc++.h>
using namespace std;
const int LG = 14;
vector<vector<double>> operator*(const vector<vector<double>> &L,
                                 const vector<vector<double>> &R) {
  vector<vector<double>> ret(L.size(), vector<double>(R.front().size()));
  for (int i = 0; i < L.size(); i++) {
    for (int j = 0; j < R.front().size(); j++) {
      for (int k = 0; k < R.size(); k++) {
        ret[i][j] += L[i][k] * R[k][j];
      }
    }
  }
  return ret;
}
inline int GCD(int a, int b) {
  if (a < 0) {
    a = -a;
  }
  if (b < 0) {
    b = -b;
  }
  return b ? GCD(b, a % b) : a;
}
inline pair<pair<int, int>, int> getLine(int X1, int Y1, int X2, int Y2) {
  pair<pair<int, int>, int> ret = {{(Y1 - Y2), (X2 - X1)}, (Y2 * X1 - X2 * Y1)};
  int G = GCD(GCD(ret.first.first, ret.first.second), ret.second);
  ret.first.first /= G;
  ret.first.second /= G;
  ret.second /= G;
  if (ret.first.first < 0 || (ret.first.first == 0 && ret.first.second < 0)) {
    ret.first.first = -ret.first.first;
    ret.first.second = -ret.first.second;
    ret.second = -ret.second;
  }
  return ret;
}
int N, Q, X[201], Y[201];
map<pair<pair<int, int>, int>, vector<int>> M;
vector<vector<double>> T[LG];
void pw(vector<vector<double>> &b, int e) {
  for (int i = 0; i < LG; i++) {
    if ((e >> i) & 1) {
      b = T[i] * b;
    }
  }
}
int main() {
  ios ::sync_with_stdio(0);
  cin.tie(0);
  cin >> N;
  T[0] = vector<vector<double>>(N, vector<double>(N));
  for (int i = 0; i < N; i++) cin >> X[i] >> Y[i];
  for (int i = 0; i < N; i++) {
    for (int j = 0; j < N; j++) {
      if (i == j) continue;
      pair<pair<int, int>, int> l = getLine(X[i], Y[i], X[j], Y[j]);
      if (M.count(l) == 0) {
        M[l].push_back(i);
      }
      M[l].push_back(j);
    }
    for (const auto &x : M)
      for (const auto &u : x.second)
        T[0][i][u] += 1.0 / (M.size() * x.second.size());
    M.clear();
  }
  for (int i = 0; i < N; i++) {
    for (int j = i + 1; j < N; j++) {
      pair<pair<int, int>, int> l = getLine(X[i], Y[i], X[j], Y[j]);
      if (M.count(l) == 0) {
        M[l].push_back(i);
      }
      if (M[l].front() == i) {
        M[l].push_back(j);
      }
    }
  }
  for (int i = 1; i < LG; i++) T[i] = T[i - 1] * T[i - 1];
  cin >> Q;
  while (Q--) {
    int u, m;
    double mx = 0;
    cin >> u >> m;
    u--;
    vector<vector<double>> res = vector<vector<double>>(N, vector<double>(1));
    res[u][0] = 1;
    pw(res, m - 1);
    for (const auto &x : M) {
      double t = 0;
      for (const auto &v : x.second) {
        t += res[v][0] / x.second.size();
      }
      mx = max(mx, t);
    }
    cout << fixed << setprecision(20) << mx << "\n";
  }
  return 0;
}
