#include <iostream>
#include <cstdio>
#include <vector>
#include <utility>
#include <queue>
#include <functional>
#define N 101
#define INF 2000000000
using namespace std;
  
int dist[N];
typedef pair<int,int> pii;
  
std::vector<pii> e1[N];
std::vector<pii> e2[N];
  
int dijk1(int a,int b){
    dist[a]=0;
    std::priority_queue<pii> pq;
    for(int i=0;i<e2[a].size();i++){
        pq.push(e2[a][i]);
    }
    while(!pq.empty()){
        pii temp=pq.top();
        int now=temp.second;
        int c=temp.first;
        pq.pop();
        if(dist[now]!=INF)continue;
        dist[now]=-c;
        if(now==b)break;
        for(int i=0;i<e2[now].size();i++){
            pq.push(make_pair(c+e2[now][i].first,e2[now][i].second));
        }
    }
    return dist[b];
}
  
int dijk(int a,int b){
    dist[a]=0;
    std::priority_queue<pii> pq;
    for(int i=0;i<e1[a].size();i++){
        pq.push(e1[a][i]);
    }
    while(!pq.empty()){
        pii temp=pq.top();
        int now=temp.second;
        int c=temp.first;
        pq.pop();
        if(dist[now]!=INF)continue;
        dist[now]=-c;
        if(now==b)break;
        for(int i=0;i<e1[now].size();i++){
            pq.push(make_pair(c+e1[now][i].first,e1[now][i].second));
        }
    }
    return dist[b];
}
  
int main(void){
    int a,b,c,d;
    int n,m;
    while(cin>>n>>m,n||m){
        for(int i=0;i<n;i++){
            cin>>a>>b>>c>>d;
e1[b].push_back(make_pair(-c,a));
            e1[a].push_back(make_pair(-c,b));
            e2[a].push_back(make_pair(-d,b));
e2[b].push_back(make_pair(-d,a));
        }
        int k;
        cin>>k;
        while(k--){
            for(int i=1;i<=m;i++)dist[i]=INF;
            cin>>a>>b>>c;
            if(c) cout<<dijk1(a,b)<<endl;
            else cout<<dijk(a,b)<<endl;
            // for(int i=1;i<=m;i++)printf("dist[%d]:%d\n",i,dist[i]);
        }
    }
    return 0;
}