#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
inline int qpow(int a, int b, const int mod, int ans = 1) {
  for (a %= mod; b; b >>= 1, a = 1ll * a * a % mod)
    if (b & 1) ans = 1ll * ans * a % mod;
  return ans;
}
inline int read(register int a = 0, register int b = 1,
                register char ch = getchar()) {
  while (ch < '0' || ch > '9') b = ch == '-' ? -1 : 1, ch = getchar();
  while (ch >= '0' && ch <= '9')
    a = (a << 3) + (a << 1) + (ch ^ 48), ch = getchar();
  return a * b;
}
int x[210], y[210], v[202], num[202][202];
const double eps = 1e-9;
inline char in(const int t, const int i, const int j) {
  if (t == j) return 1;
  if (x[i] == x[j] || x[i] == x[t] || x[j] == x[t])
    return x[i] == x[j] && x[i] == x[t];
  double k1 = 1.0 * (y[i] - y[t]) / (x[i] - x[t]),
         k2 = 1.0 * (y[j] - y[t]) / (x[j] - x[t]);
  return fabs(k1 - k2) < eps;
}
double b[14][202][202], a[202], c[202];
int has[40001][201], L;
bitset<201> vv[202];
int main() {
  const int n = read();
  for (int i = 1; i <= n; i++) x[i] = read(), y[i] = read();
  for (int i = 1; i <= n; i++) {
    int N = 0;
    for (int j = 1; j <= n; j++)
      if (i != j && v[j] != i) {
        num[++N][0] = 0;
        for (int k = 1; k <= n; k++)
          if (k != i && in(k, i, j)) num[N][++num[N][0]] = k, v[k] = i;
        if (!vv[i][j]) {
          ++L;
          has[L][++has[L][0]] = i;
          bitset<201> tmp;
          tmp.reset();
          tmp[i] = 1;
          for (int k = num[N][0]; k; k--)
            has[L][++has[L][0]] = num[N][k], tmp[num[N][k]] = 1;
          vv[i] |= tmp;
          for (int k = num[N][0]; k; k--) vv[num[N][k]] |= tmp;
        }
      }
    for (int j = 1; j <= N; j++) {
      double tmp = 1.0 / (num[j][0] + 1) / N;
      b[0][i][i] += tmp;
      for (int k = 1; k <= num[j][0]; k++) b[0][num[j][k]][i] = tmp;
    }
  }
  for (int t = 1; t < 14; t++)
    for (int i = 1; i <= n; i++)
      for (int j = 1; j <= n; j++)
        for (int k = 1; k <= n; k++)
          b[t][i][j] += b[t - 1][i][k] * b[t - 1][k][j];
  int q = read();
  while (q--) {
    const int t = read(), m = read() - 1;
    a[t] = 1;
    for (int i = 0; i < 14; i++)
      if ((m >> i) & 1) {
        for (int j = 1; j <= n; j++)
          for (int k = 1; k <= n; k++) c[j] += a[k] * b[i][k][j];
        for (int j = 1; j <= n; j++) a[j] = c[j], c[j] = 0;
      }
    double ans = 0;
    for (int i = 1; i <= L; i++) {
      double tmp = 0;
      for (int j = has[i][0]; j; j--) tmp += a[has[i][j]];
      ans = max(ans, tmp / has[i][0]);
    }
    for (int j = 1; j <= n; j++)
      for (int k = 1; k <= n; k++) c[j] += a[k] * b[0][k][j];
    for (int j = 1; j <= n; j++) a[j] = c[j], c[j] = 0;
    for (int i = 1; i <= n; i++) ans = max(ans, a[i]), a[i] = 0;
    printf("%.10lf\n", ans);
  }
}
