/*

?????????????????? ????????\?????????????¬???¨???

??? ???
???????????´??????????´\????????????????????????????????§????????????????¨??????????????????????????????????
????????????????????§??????????????????????????????????????????????????§????????????????????????????????????
??????????????\??????????????????????????¨?????\???????????????????????????????????????????????????????????°
??????????¨????????????????????????????????????????????´?????????????????????§??????????????????????????????
?¨??????????????????????????????°??????????????£????????????????????????

??????????????±????§??????°?????\?????¨?????????????????????????????????????????????????????????????°???????
???????????????????????°????????????????????????????????????????§???? 1 ??\??? 1000 ??\????????´??°??§
??¨??????????§??????° m ??? 1 ??\??? 1000 ??\?????§????????????????????±??????????????????????????????
????§???? a b ???????§?????????? time ????????? cost ??§??¨????????? time cost ??????????????? 
1 ??\??? 1000 ??\?????¨????????????????????????????????????????§? p ?????°????§? q ???????¨???? r 
??§??¨????????? r ??? 0 ?????¨???????????????????????? 1 ?????????????°???????????????????????????????
?????????????????° k ??? 1 ??\??? 1000 ??\?????§??????????????????????????????????????????????????????
???????????¨????????????

??\ ???
?????°???????????????????????????????????\?????¨?????????????????????????????\??????????????????????????????
???????????§????????????????????????????????????????????\????????¨????????§??????
1 ?????? ??????????????±?????° n????§??????° m ?????´??° ??´??°???????§???????????????????
2 ?????? ?¬¬ 1 ?????????????????± a b cost time?????´??° ??´??° ??´??° ??´??°???????§???????????????????
3 ?????? ?¬¬ 2 ?????????????????±
???
n+1 ?????? ?¬¬ n ?????????????????±
n+2 ?????? ????????????????????° k?????´??°???
n+3 ?????? ?¬¬ 1 ?????????????????? p q r ?????´??° ??´??° ??´??°???????§???????????????????
n+4 ?????? ?¬¬ 2 ??????????????????
 ???
n+2+k ??? ?¬¬ k ??????????????????


??? ???
??\??????????????????????????¨??????????????????????????????????°????????????????????????????

*/


/*
	???????????£????????????????????????????§£???
		??? ?????????????????????????§£?????????????????????????????????????????§???????????£?????´???
		??????????????¶????????¨?????£?????????????????????

		???2009??´????????§???????????????????????§??????????§£??¬??§??????????§£???????????£????§£???
		?????????????????????...
 */

#include <stdio.h>

#define NUM 1000			// ?????????????´?????????°
#define MAX 1000000000	// ?????????????´????????????????????????????????????§???

int min( int a, int b )
{
	if ( a > b ) {
		return b;
	}
	else {
		return a;
	}
}

int main ( void )
{
	int i, j;
	int c, t;
	int a, b;						// ??????????????± ?§???? a????????? b
	int n, m;						// ??????????????±?????° n????§??????° m 
	int r;							// ???????????????????¨????(0:??????????????? 1:????°???????)
	int	cost[ NUM ][ NUM ];			// ?????????????????????
	int	time[ NUM ][ NUM ];			// ?????????????????????

	while ( 1 ) {
		scanf( "%d %d", &n, &m );
		if ( ( n == 0 ) || ( m == 0 ) ) {
			break;					// ????????°???????????????
		}

		for ( i = 0 ; i < m ; i++ ) {
			for ( j = 0 ; j < m ; j++ ) {
				if ( i != j ) {
					cost[ i ][ j ] = MAX;
					time[ i ][ j ] = MAX;
				}
				else {
					cost[ i ][ j ] = 0;
					time[ i ][ j ] = 0;
				}
			}
		}

		for ( i = 0 ; i < n ; i++ ) {
			scanf( "%d %d %d %d", &a, &b, &c, &t );

			//??????????????\???????????????????????±?????¨?????????????????¨??????????????????????????????
			cost[ a - 1 ][ b - 1 ] = c;
			time[ a - 1 ][ b - 1 ] = t;

			cost[ b - 1 ][ a - 1 ] = c;		// ??????????????????????????????????????????
			time[ b - 1 ][ a - 1 ] = t;
		}

		// ?¶?????????????????????±????£??????????
		for (  i = 0 ; i < m ; i++ ) {
			for (  a = 0 ; a < m ; a++ ) {
				if ( a == i ) {
					continue;
				}
				else {
					for ( b = 0 ; b < m ; b++ ) {
						if ( ( a == i ) || ( b == i ) || ( a == b ) ) {
							continue;
						}
						else {
							cost[ a ][ b ] = min( cost[ a ][ i ] + cost[ i ][ b ], cost[ a ][ b ]);
							cost[ b ][ a ] = min( cost[ b ][ i ] + cost[ i ][ a ], cost[ b ][ a ]);

							time[ a ][ b ] = min( time[ a ][ i ] + time[ i ][ b ], time[ a ][ b ]);
							time[ b ][ a ] = min( time[ b ][ i ] + time[ i ][ a ], time[ b ][ a ]);
						}
					}
				}
			}
		}

/*
		for (  a = 0 ; a < m ; a++ ) {
			for (  b = 0 ; b < m ; b++ ) {
				printf( "%3d ", cost[ a ][ b ] );
			}
			printf( "\n" );
		}
*/		

		scanf( "%d", &n );					// ????????????????????°?????\???
		for ( i = 0 ; i < n ; i++ ) {
			scanf( "%d %d %d", &a, &b, &r );

			if ( a > b ) {
				j = a;
				a = b;
				b = j;
			}

			if ( r == 0 ) {
				printf( "%d\n", cost[ a - 1 ][ b - 1 ] );
			}
			else {
				printf( "%d\n", time[ a - 1 ][ b - 1 ] );
			}
		}
	}

	return 0;
}

Measured memory_bytes: 6764