#include <bits/stdc++.h>
using namespace std;
template <typename tp>
tp read() {
  char c = getchar();
  tp x = 0;
  bool sgn = 0;
  while ((c < '0' || c > '9') && c != '-') c = getchar();
  if (c == '-') sgn = 1, c = getchar();
  while (c >= '0' && c <= '9') x = (x << 3) + (x << 1) + c - '0', c = getchar();
  return sgn ? -x : x;
}
int n, m, x[205], y[205], cnt[205];
bool vis[205];
double dp[18][205][205], a[205], b[205];
vector<int> pnt[205][205];
vector<pair<int, int> > line;
vector<pair<int, int> >::iterator it;
vector<int>* itt;
signed main() {
  n = read<int>();
  for (int i = 1; i <= n; i++) {
    x[i] = read<int>(), y[i] = read<int>();
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) vis[j] = 0;
    for (int j = 1; j <= n; j++) {
      if (vis[j]) continue;
      if (i == j) continue;
      cnt[i]++;
      for (int k = 1; k <= n; k++) {
        if ((x[k] - x[j]) * (y[j] - y[i]) == (x[j] - x[i]) * (y[k] - y[j])) {
          pnt[i][j].push_back(k);
          vis[k] = 1;
        }
      }
      line.push_back(pair<int, int>(pnt[i][j][0], pnt[i][j][1]));
    }
  }
  sort(line.begin(), line.end());
  it = unique(line.begin(), line.end());
  while (it != line.end()) line.pop_back();
  for (it = line.begin(); it != line.end(); it++) {
    itt = &pnt[it->first][it->second];
    for (int i = 0; i < int(itt->size()); i++) {
      for (int j = 0; j < int(itt->size()); j++) {
        dp[0][itt->at(i)][itt->at(j)] += 1 / double(itt->size());
      }
    }
  }
  for (int i = 1; i <= n; i++) {
    for (int j = 1; j <= n; j++) {
      dp[0][i][j] /= cnt[i];
    }
  }
  for (int t = 1; t <= 15; t++) {
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= n; j++) {
        for (int k = 1; k <= n; k++) {
          dp[t][i][j] += dp[t - 1][i][k] * dp[t - 1][k][j];
        }
      }
    }
  }
  m = read<int>();
  while (m--) {
    int en = read<int>(), steps = read<int>() - 1;
    for (int i = 1; i <= n; i++) a[i] = 0;
    a[en] = 1;
    for (int i = 0; (1 << i) <= steps; i++) {
      if ((1 << i) & steps) {
        for (int j = 1; j <= n; j++) b[j] = 0;
        for (int j = 1; j <= n; j++) {
          for (int k = 1; k <= n; k++) {
            b[k] += dp[i][k][j] * a[j];
          }
        }
        for (int j = 1; j <= n; j++) a[j] = b[j];
      }
    }
    double ans = 0;
    for (it = line.begin(); it != line.end(); it++) {
      itt = &pnt[it->first][it->second];
      double res = 0;
      for (int i = 0; i < int(itt->size()); i++) {
        res += a[itt->at(i)];
      }
      res /= double(itt->size());
      ans = max(ans, res);
    }
    for (int i = 1; i <= n; i++) {
      double res = 0;
      for (int j = 1; j <= n; j++) {
        res += dp[0][i][j] * a[j];
      }
      ans = max(ans, res);
    }
    printf("%.10lf\n", ans);
  }
  return 0;
}
