#include <iostream>
#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 dfs(int now,int c){
	if(dist[now]>=c)dist[now]=c;
	else return 0;
	for(int i=0;i<e1[now].size();i++){
		dfs(e1[now][i].second,c+e1[now][i].first);
	}
	return 0;
}

int dfs1(int now,int c){
	if(dist[now]>=c)dist[now]=c;
	else return 0;
	for(int i=0;i<e2[now].size();i++){
		dfs1(e2[now][i].second,c+e2[now][i].first);
	}
	return 0;
}

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[a].push_back(make_pair(c,b));
			e2[a].push_back(make_pair(d,b));
		}
		int k;
		cin>>k;
		while(k--){
			for(int i=1;i<=m;i++)dist[i]=INF;
			cin>>a>>b>>c;
			if(c) dfs1(a,0);
			else dfs(a,0);
			cout<<dist[b]<<endl;
		}
	}
	return 0;
}