#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

#define INF 10000;

struct cost_tm{int c; int t;};
cost_tm d[101][101];
int n, m, a, b, cost, tm, k, p, q, r;
bool tflag, cflag;

void Init(){
for(int i=0; i<=100; i++)
for(int j=0; j<=100; j++)
i==j ? d[i][j].c=d[i][j].t=0 : d[i][j].c=d[i][j].t=INF;
}

void Input(){
for(int i=0; i<n; i++){
scanf("%d %d %d %d", &a, &b, &cost, &tm);
d[a][b].c=d[b][a].c=cost;
d[a][b].t=d[b][a].t=tm;
}
}

int wf(){
if(r){
if(!tflag){//すでに計算しているか。
for(int k=1; k<=m; k++)
for(int i=1; i<=m; i++)
for(int j=1; j<=m; j++)
d[i][j].t=min(d[i][j].t, d[i][k].t+d[k][j].t);
tflag=true;
}
return d[p][q].t;
}
else{
if(!cflag){
for(int k=1; k<=m; k++)
for(int i=1; i<=m; i++)
for(int j=1; j<=m; j++)
d[i][j].c=min(d[i][j].c, d[i][k].c+d[k][j].c);
cflag=true;
}
return d[p][q].c;
} 
}


int main(){
while(cin>>n>>m, n||m){
tflag=cflag=false;
Init();
Input();

cin>>k;
while(k--){
cin>>p>>q>>r;
cout<<wf()<<endl;
}
}
return 0;
}