#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <memory.h>
using namespace std;
double res[60][60];
vector<set<int> >v;
double cal(int x, int y)
{
if(!(res[x][y] < 0)) return res[x][y];
set<int>::iterator it1 = v[x].begin();
set<int>::iterator it2 = v[y].begin();
int nc = 0;
while(it1 != v[x].end() && it2 != v[y].end())
{
if(*it1 == *it2)
{
nc ++ ;
it1 ++;
it2 ++;
}
else if(*it1 < *it2)
{
it1 ++;
}
else it2 ++;
}
int nt = v[x].size() + v[y].size() - nc;
res[x][y] = 100.0 * nc / nt;
return res[x][y];
}
void init_res()
{
for(int i = 0; i < 60; i ++)
for(int j = 0; j < 60; j ++) res[i][j] = -1;
}
int main()
{
init_res();
int n, m, x;
scanf("%d", &n);
for(int i = 0; i < n; i ++)
{
scanf("%d", &m);
set<int>s;
for(int j = 0; j < m; j ++)
{
scanf("%d", &x);
s.insert(x);
}
v.push_back(s);
}
char c = '%';
int k, y;
scanf("%d", &k);
while(k--)
{
scanf("%d %d", &x, &y);
printf("%.1f%c\n", cal(x-1, y-1), c);
}
return 0;
}