#include <cstdio>
#include <cstring>

using namespace std;

// 線路の情報の構造体

typedef struct _lnInfo{
	int cost;
	int time;
}lnInfo;

// 問い合わせの構造体

typedef struct _Req{
	int p;
	int q;
	int r;
}Req;


int main(void){
	int n, m, k, i, j, a, b, cost, time, ans;
	lnInfo st[100][100];
	Req rq;
	while(1){
		scanf("%d%d",&n,&m);
		if(n == 0 && m == 0){
			break;
		}
		memset(st,-1,sizeof(st));
		for(i = 0;i < n;i++){
			scanf("%d%d%d%d",&a,&b,&cost,&time);
			st[a - 1][b - 1].cost = st[b - 1][a - 1].cost = cost;
			st[a - 1][b - 1].time = st[b - 1][a - 1].time = time;
			
		}
		for(i = 0;i < m;i++){
			for(j = 0;j < m;j++){
				for(k = 0;k < m;k++){
					if(st[j][i].cost != -1 && st[i][k].cost != -1 && (st[j][k].cost == -1 || st[j][k].cost > st[j][i].cost + st[i][k].cost)){
						st[j][k].cost = st[j][i].cost + st[i][k].cost;
					}
					if(st[j][i].time != -1 && st[i][k].time != -1 && (st[j][k].time == -1 || st[j][k].time > st[j][i].time + st[i][k].time)){
						st[j][k].time = st[j][i].time + st[i][k].time;
					}
				}
			}
		}
		scanf("%d",&k);
		for(i = 0;i < k;i++){
			scanf("%d%d%d",&rq.p,&rq.q,&rq.r);
			if(rq.r == 0){
				ans = st[rq.p - 1][rq.q - 1].cost;
			}else{
				ans = st[rq.p - 1][rq.q - 1].time;
			}
			printf("%d\n",ans);
		}
	}
	return 0;
}