#include<cstdio>
#include<climits>

using namespace std;

int a,b,c,d,T,n;
int s=0,min=INT_MAX,m,tul[102][102]={0},yv[102][102]={0},tsag[102][102]={0};

int go(int x){
	if(x==b){
		if(s<min) min=s;
		return 0;
	}
	for(int i=1 ; i<=m ; i++ ){
		if(tul[x][i]!=0 && yv[x][i]==0){
			yv[x][i]=1;
			yv[i][x]=1;
			s+=tul[x][i];
			go(i);
			s-=tul[x][i];
			yv[x][i]=0;
			yv[i][x]=0;
		}
	}
}
int go1(int x){
	if(x==b){
		if(s<min) min=s;
		return 0;
	}
	for(int i=1 ; i<=m ; i++ ){
		if(tsag[x][i]!=0 && yv[x][i]==0){
			yv[x][i]=1;
			yv[i][x]=1;
			s+=tsag[x][i];
			go1(i);
			s-=tsag[x][i];
			yv[x][i]=0;
			yv[i][x]=0;
		}
	}
}

int main(){
	while(1){
		scanf("%d %d",&n,&m);
		if(n==0 || m==0) break;
		for(int i=0 ; i<n ; i++ ){
			scanf("%d %d %d %d",&a,&b,&c,&d);
			tul[a][b]=c;
			tul[b][a]=c;
			tsag[a][b]=d;
			tsag[b][a]=d;
		}
		scanf("%d",&T);
		while(T--){
			scanf("%d %d %d",&a,&b,&c);
			s=0;
			min=INT_MAX; 
			if(c==0) go(a);
			else go1(a);
			printf("%d\n",min);
		}
		int tul[102][102]={0},yv[102][102]={0},tsag[102][102]={0};
	}
}