#include<cstdio>
#include<algorithm>
#include<cstring>

#define MIN(x,y) ((x<y)? x:y)
#define INF (100000000)

using namespace std;

int date[2][105][105];
int answer[105];//最短距離
int subdate[105];//0...最短が決定,定数...次行ける,INF...次行けない
int n,m;
int a,b,cost,time;
int k;
int p,q,r;

int main()
{
	while(true)
	{
		scanf("%d%d",&n,&m);
		for(int j=0;j<=m;j++)for(k=0;k<=m;k++)date[0][j][k]=date[1][j][k]=INF;
		if(n==0&&m==0)break;
		for(int i=0;i<n;i++)
		{
			scanf("%d%d%d%d",&a,&b,&cost,&time);
			date[0][a][b]=date[0][b][a]=cost;
			date[1][a][b]=date[1][b][a]=time;
		}
		scanf("%d",&k);
		for(int i=0;i<k;i++)
		{
			scanf("%d%d%d",&p,&q,&r);
			fill(subdate,subdate+105,INF);
			answer[104]=p;
			answer[p]=0;
			subdate[p]=0;
			while(true)
			{
				answer[101]=-1;
				//最後に更新した点から行けるところを更新
				//そして、最短経路が決まっているところから
				//後ひと駅で行ける場所の中で最短を最短経路として決定する
				answer[103]=INF;
				for(int j=1;j<=m;j++)
				{
					subdate[j]=MIN(subdate[j],answer[answer[104]]+date[r][answer[104]][j]);
				}
				for(int j=1;j<=m;j++)
				{
					if(subdate[j]!=0&&answer[103]>subdate[j])
					{
						answer[103]=subdate[j];
						answer[104]=j;
					}
				}
				if(answer[103]==INF)break;
				answer[answer[104]]=answer[103];
				subdate[answer[104]]=0;
			}
			printf("%d\n",answer[q]);
		}
	}
	return 0;
}