#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <complex>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <functional>
#include <iostream>
#include <map>
#include <set>
using namespace std;
typedef pair<int,int> P;
#define pu push
#define pb push_back
#define mp make_pair
#define eps 1e-7
#define INF 200000000
#define EQ(a,b) (abs((a)-(b))<EPS)
int n,m;
int mintime[100][100],mincost[100][100];
void warshall_floyd()
{
	for(int k=0;k<m;k++)
	{
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<m;j++)
			{
				mincost[i][j]=min(mincost[i][j],mincost[i][k]+mincost[k][j]);
				mintime[i][j]=min(mintime[i][j],mintime[i][k]+mintime[k][j]);
			}
		}
	}
	return;
}
int main()
{
	while(1)
	{
		cin >> n >> m;
		if(n==0&&m==0)break;
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(i==j)
				{
					mintime[i][j]=0;
					mincost[i][j]=0;
				}
				else
				{
					mintime[i][j]=INF;
					mincost[i][j]=INF;
				}
			}
		}
		for(int i=0;i<n;i++)
		{
			int a,b,cost,time;
			cin >> a >> b >> cost >> time;
			mincost[a-1][b-1]=cost;
			mincost[b-1][a-1]=cost;
			mintime[a-1][b-1]=time;
			mintime[b-1][a-1]=time;
		}
		warshall_floyd();
		/*
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<m;j++)
			{
				cout << mincost[i][j] << ' ';
			}
			cout << endl;
		}
		for(int i=0;i<m;i++)
		{
			for(int j=0;j<m;j++)
			{
				cout << mintime[i][j] << ' ';
			}
			cout << endl;
		}
		*/
		int k1;
		cin >> k1;
		for(int i=0;i<k1;i++)
		{
			int p,q,r;
			cin >> p >> q >> r;
			if(r==0)
			{
				cout << mincost[p-1][q-1] << endl;
			}
			else
			{
				cout << mintime[p-1][q-1] << endl;
			}
		}
	}
	return 0;
}