#include<iostream>
#include<algorithm>
#define MAX 1000000
using namespace std;
int main(){
	int n, m, a, b, cost, ti, k, p, q, r, point = 0;
	int cost_[101][101], time_[101][101], k_[101];
	for (int i = 0; i < 101; i++){
		for (int l = 0; l < 101; l++){
			cost_[i][l] = MAX;
			ti_[i][l] = MAX;
		}
	}
	cin >> n >> m;
	while (n != 0 && m != 0){
		for (int i = 0; i < n; i++){
			cin >> a >> b >> cost >> ti;
			cost_[a][b] = cost;
			ti_[a][b] = time;
		}
		cin >> k;
		for (int i = 0; i < k; i++){
			cin >> p >> q >> r;
			k_[point] = p;
			k_[point + 1] = q;
			k_[point + 2] = r;
			point += 3;
		}point = 0;
		for (int i = 1; i <= m; i++){
			for (int j = 1; j <= m; j++){
				for (int o = 1; o <= m; o++){
					if (cost_[j][i] != MAX && cost_[i][o] != MAX &&
						ti_[j][i] != MAX && ti_[i][o] != MAX){
						cost_[j][o] = min(cost_[j][o], cost_[j][i] + cost_[i][o]);
						ti_[j][o] = min(ti_[j][o], ti_[j][i] + ti_[i][o]);
					}
				}
			}
		}
		for (int i = 0; i < k; i++){
			if (k_[point + 2] == 0){
				cout << cost_[k_[point]][k_[point + 1]] << endl;
			}
			else cout << time_[k_[point]][k_[point + 1]] << endl;
			point += 3;
		}
		cin >> n >> m;
	}
	return 0;
}