#include using namespace std; const int MAXN = 60; double pr[MAXN][MAXN], b[MAXN]; string name[MAXN]; unordered_map rname; double btot; int place(int i, int j, int k, int a) { if (i == a) return 1; if (j == a) return 2; if (k == a) return 3; return a + (i > a) + (j > a) + (k > a); } double prob(int i, int j, int k) { return b[i]/btot * b[j]/(btot - b[i]) * b[k]/(btot - b[i] - b[j]); } int main() { cout.setf(ios::fixed); cout.precision(10); int N; cin >> N; for (int i = 1; i <= N; ++i) { cin >> b[i] >> name[i]; rname[name[i]] = i; btot += b[i]; } if (N == 1) pr[1][1] = 1.0; else if (N == 2) pr[1][2] = pr[2][1] = 1.0 - (pr[1][1] = pr[2][2] = b[1]/btot); else for (int i = 1; i <= N; ++i) for (int j = 1; j <= N; ++j) for (int k = 1; k <= N; ++k) if (i != j && i != k && j != k) for (int a = 1; a <= N; ++a) pr[a][place(i,j,k,a)] += prob(i,j,k); for (int i = 1; i <= N; ++i) for (int j = 2; j <= N; ++j) pr[i][j] += pr[i][j-1]; int Q; cin >> Q; while (Q--) { string t; int k; cin >> t >> k; cout << pr[rname[t]][k] << endl; } }