#include<bits/stdc++.h>
using namespace std;
int n,m,t,l,deg[111],dep[11414],a[111],fa[114514][2],k;
vector<int>v[14432];
bool vis[11451],b[1145][1145];
struct huge{
int a[311],len;
}f[311][311];
huge operator+(huge x,huge y){
for(int i=x.len+1;i<=300;i++)
x.a[i]=0;
for(int i=y.len+1;i<=300;i++)
y.a[i]=0;
huge tmp;
tmp.len=std::max(x.len,y.len);tmp.a[tmp.len+1]=0;
for(int i=tmp.len;i>=0;i--){
tmp.a[i]=x.a[i]+y.a[i]+(tmp.a[i+1]/10);
tmp.a[i+1]%=10;
}
while(!tmp.a[tmp.len]&&tmp.len)
tmp.len--;
return tmp;
}
huge div2(huge x){
for(int i=x.len+1;i<=300;i++) x.a[i]=0;
x.len++;
for(int i=0;i<=x.len;i++){
if(x.a[i]%2==1) x.a[i+1]+=10;
x.a[i]/=2;
}
while(x.a[x.len]==0&&x.len) x.len--;
return x;
}
void print(huge x){
cout<<x.a[0]*100+x.a[1]*10+x.a[2];
if(x.len>=3){
cout<<".";
for(int i=3;i<=x.len;i++) cout<<x.a[i];
}
cout<<"%\n";
}
void topo(){
queue<int>q;
for(int i=1;i<=n;i++)
if(!deg[i])
q.push(i),vis[i]=1,dep[i]=1;
while(!q.empty()){
int u=q.front();
q.pop();
for(int vv:v[u]){
deg[vv]--;
if(!vis[vv]&&!deg[vv]){
vis[vv]=0,dep[vv]=dep[u]+1;
q.push(vv);
}
}
}
return ;
}
huge dfs(int u,int v){
if(b[u][v]) return f[u][v];
if(dep[u]<dep[v]) swap(u,v);
b[u][v]=b[v][u]=1;
return f[u][v]=f[v][u]=div2(dfs(fa[u][0],v)+dfs(fa[u][1],v));
}
void init(){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j) f[i][j].len=1,f[i][j].a[0]=1,b[i][j]=1;
else if(!deg[i]&&!deg[j]) f[i][j].len=1,f[i][j].a[0]=0,b[i][j]=0;
}
}
return ;
}
int main(){
cin>>n>>k;
for(int i=1,x,y,z;i<=k;i++){
cin>>x>>y>>z;
v[y].push_back(x);
v[z].push_back(x);
fa[x][0]=y;
fa[x][1]=z;
deg[x]+=2;
}
init();
topo();
cin>>m;
for(int i=1,x,y;i<=m;i++) cin>>x>>y,print(dfs(x,y));
}