#include<cstdio>
#include<algorithm>
#include<queue>

#define INF 1<<29

class state{
	public:
	int p,v;
	state(){}
	state(int a,int b){
		p=a;v=b;
	}
	bool operator < (const state &a) const{
		return v > a.v;
	}
};
using namespace std;

int main(){
	while(1){
		int n,m;
		scanf("%d%d",&m,&n);
		if(n==0 && m==0){
			break;
		}
		int cost[101][101];
		int time[101][101];
		
		for(int i=0;i<101;i++)
		for(int j=0;j<101;j++)
		cost[i][j]=time[i][j]=INF;
		
		for(int i=0;i<m;i++){
			int a,b,c,d;
			scanf("%d%d%d%d",&a,&b,&c,&d);
			cost[a][b]=cost[b][a]=c;
			time[a][b]=time[b][a]=d;
		}
		
		scanf("%d",&m);
		for(int i=0;i<m;i++){
			int st,en,va;
			scanf("%d%d%d",&st,&en,&va);
			
			priority_queue<state> aa;
			
			int meen[101];
			int visit[101]={0};
			
			for(int i=0;i<101;i++){meen[i]=INF;}
			
			aa.push(state(st,0));
			meen[st]=0;
			int ans=0;
			while(1){
				state u = aa.top();
				aa.pop();
				
				if(u.p==en){
					ans=u.v;
					break;
				}
				
				visit[u.p]=1;
				
				for(int i=1;i<=n;i++){
					if(visit[i]==0){
						int val=cost[i][u.p];
						if(va==1){
							val=time[i][u.p];
						}
						if(val+u.v < meen[i]){
							meen[i]=val+u.v;
							aa.push(state(i,meen[i]));
						}
					}
				}
			}
			printf("%d\n",ans);
		}
	}
}