// 506 D
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <unordered_map>
#define ee '\n'
int n, m;
struct DisjointSet {
std::unordered_map<int, int> p;
std::unordered_map<int, int> Rank;
int Find(int x) {
if(!p.count(x)) {
//printf("not create yet!\n");
Rank[x] = 1;
p[x] = x;
return x;
}
//printf("go to %d", p[x]);
p[x] = (x == p[x] ? x : Find(p[x]));
return p[x];
}
void Union(int x, int y) {
int px = Find(x), py = Find(y);
int rx = Rank[x], ry = Rank[y];
if(rx < ry) p[px] = py;
else if(rx > ry) p[py] = px;
else {
p[px] = py;
Rank[y]++;
}
}
};
int main() {
scanf("%d %d", &n, &m);
std::map<int, DisjointSet> djs;
for(int i = 0; i < m; i++) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c);
djs[c].Union(a, b);
}
int q; scanf("%d", &q);
while(q--) {
int a, b; scanf("%d %d", &a, &b);
long long ans = 0;
for(std::map<int, DisjointSet>::iterator iter = djs.begin(); iter != djs.end(); iter++) {
if(iter->second.Find(a) == iter->second.Find(b)) ans++;
}
printf("%lld\n", ans);
}
return 0;
}
Ly8gNTA2IEQKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHVub3JkZXJlZF9tYXA+CiNkZWZpbmUgZWUgJ1xuJwppbnQgbiwgbTsKc3RydWN0IERpc2pvaW50U2V0IHsKICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQsIGludD4gcDsKICAgIHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQsIGludD4gUmFuazsKICAgIGludCBGaW5kKGludCB4KSB7CiAgICAgICAgaWYoIXAuY291bnQoeCkpIHsKICAgICAgICAgICAgLy9wcmludGYoIm5vdCBjcmVhdGUgeWV0IVxuIik7CiAgICAgICAgICAgIFJhbmtbeF0gPSAxOwogICAgICAgICAgICBwW3hdID0geDsKICAgICAgICAgICAgcmV0dXJuIHg7CiAgICAgICAgfQogICAgICAgIC8vcHJpbnRmKCJnbyB0byAlZCIsIHBbeF0pOwogICAgICAgIHBbeF0gPSAoeCA9PSBwW3hdID8geCA6IEZpbmQocFt4XSkpOwogICAgICAgIHJldHVybiBwW3hdOwogICAgfQogICAgdm9pZCBVbmlvbihpbnQgeCwgaW50IHkpIHsKICAgICAgICBpbnQgcHggPSBGaW5kKHgpLCBweSA9IEZpbmQoeSk7CiAgICAgICAgaW50IHJ4ID0gUmFua1t4XSwgcnkgPSBSYW5rW3ldOwogICAgICAgIGlmKHJ4IDwgcnkpIHBbcHhdID0gcHk7CiAgICAgICAgZWxzZSBpZihyeCA+IHJ5KSBwW3B5XSA9IHB4OwogICAgICAgIGVsc2UgewogICAgICAgICAgICBwW3B4XSA9IHB5OwogICAgICAgICAgICBSYW5rW3ldKys7CiAgICAgICAgfQogICAgfQp9OwoKaW50IG1haW4oKSB7CiAgICBzY2FuZigiJWQgJWQiLCAmbiwgJm0pOwogICAgc3RkOjptYXA8aW50LCBEaXNqb2ludFNldD4gZGpzOwogICAgZm9yKGludCBpID0gMDsgaSA8IG07IGkrKykgewogICAgICAgIGludCBhLCBiLCBjOwogICAgICAgIHNjYW5mKCIlZCAlZCAlZCIsICZhLCAmYiwgJmMpOwogICAgICAgIGRqc1tjXS5VbmlvbihhLCBiKTsKICAgIH0KICAgIGludCBxOyBzY2FuZigiJWQiLCAmcSk7CiAgICB3aGlsZShxLS0pIHsKICAgICAgICBpbnQgYSwgYjsgc2NhbmYoIiVkICVkIiwgJmEsICZiKTsKICAgICAgICBsb25nIGxvbmcgYW5zID0gMDsKICAgICAgICBmb3Ioc3RkOjptYXA8aW50LCBEaXNqb2ludFNldD46Oml0ZXJhdG9yIGl0ZXIgPSBkanMuYmVnaW4oKTsgaXRlciAhPSBkanMuZW5kKCk7IGl0ZXIrKykgewogICAgICAgICAgICBpZihpdGVyLT5zZWNvbmQuRmluZChhKSA9PSBpdGVyLT5zZWNvbmQuRmluZChiKSkgYW5zKys7CiAgICAgICAgfQogICAgICAgIHByaW50ZigiJWxsZFxuIiwgYW5zKTsKICAgIH0KICAgIHJldHVybiAwOwp9Cg==