#include<iostream>

#define INF 1000000

int list[101][101][2];
int cost[101];
bool used[101];
int n,m,k;

int main(){
	while(std::cin>>n>>m){
		if(n==0&&m==0)break;
		for(int i=0;i<=m;i++){
			for(int j=0;j<=m;j++){
				list[i][j][0]=INF;
				list[i][j][1]=INF;
			}
		}
		for(int i=0;i<n;i++){
			int a,b,c,d;
			std::cin>>a>>b>>c>>d;
			list[a][b][0]=c;list[a][b][1]=d;
			list[b][a][0]=c;list[b][a][1]=d;
		}
		std::cin>>k;
		for(int i=0;i<k;i++){
			for(int j=0;j<=m;j++)cost[j]=INF,used[j]=false;
			int p,q,r;
			std::cin>>p>>q>>r;
			cost[p]=0;
			while(1){
				used[p]=true;
				if(used[q])break;
				for(int i=1;i<=m;i++){
					if(list[p][i][r]!=INF){
						if(cost[i]>cost[p]+list[p][i][r])cost[i]=cost[p]+list[p][i][r];
					}
				}
				p=0;
				for(int i=1;i<=m;i++){
					if(!used[i]&&cost[p]>cost[i])p=i;
				}
			}
			std::cout<<cost[q]<<std::endl;
		}
	}
	return 0;
}