#include <iostream>

using namespace std;

const int MAX_N = 110;
const int INF = 10000;
int d_cost[MAX_N][MAX_N];
int d_time[MAX_N][MAX_N];
int n, m;

void warshall_floyd(int d[MAX_N][MAX_N])
{
    for (int k = 0; k < m; k++)
        for (int i = 0; i < m; i++)
            for (int j = 0; j < m; j++)
                d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}

int main()
{
    while (cin >> n >> m, n || m) {
        int a, b, cost, time;
        int k, p, q, r;

        // 初期化
        for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++) {
                if (i == j) 
                    d_cost[i][j] = d_time[i][j] = 0;
                else
                    d_cost[i][j] = d_time[i][j] = INF;
            }

        for (int i = 0; i < n; i++) {
            cin >> a >> b >> cost >> time;
            a--, b--;
            d_cost[a][b] = d_cost[b][a] = cost;
            d_time[a][b] = d_time[b][a] = time;
        }
//        warshall_floyd(d_cost);
//        warshall_floyd(d_time);

        cin >> k;
        for (int i = 0; i < k; i++) {
            cin >> p >> q >> r;

            p--, q--;
            if (r == 0)
                cout << d_cost[p][q] << endl;
            else
                cout << d_time[p][q] << endl;
        }
    }

    return 0;
}