#include <bits/stdc++.h>
#define ll long long
#define go ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
using namespace std;
int const N = 120;
int n;
vector<pair<int, int>> adj[N];
bool visitd[N];
void clearVisited()
{
for (int i = 0; i < N; i++)
{
visitd[i] = false;
}
}
bool dfs(int s, int t, int c)
{
if (visitd[s])
return false;
visitd[s] = true;
if (s == t)
return true;
if (s > n)
return false;
bool ans = false;
for (auto i : adj[s])
{
if (i.second == c)
{
ans = ans || dfs(i.first, t, c);
}
}
return ans;
}
void solve()
{
int m;
cin >> n >> m;
for (int i = 0; i < m; i++)
{
int s, d, c;
cin >> s >> d >> c;
adj[s].push_back({d, c});
adj[d].push_back({s, c});
}
int q;
cin >> q;
for (int i = 0; i < q; i++)
{
int u, v;
cin >> u >> v;
int ans = 0;
for (int i = 1; i <= 100; i++)
{
clearVisited();
if (dfs(u, v, i))
ans++;
}
cout << ans << endl;
}
}
int main()
{
int t = 1;
// cin>>t;
// go;
while (t--)
{
solve();
cout << "\n";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZ28gaW9zOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCksIGNvdXQudGllKDApCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgY29uc3QgTiA9IDEyMDsKaW50IG47CnZlY3RvcjxwYWlyPGludCwgaW50Pj4gYWRqW05dOwpib29sIHZpc2l0ZFtOXTsKdm9pZCBjbGVhclZpc2l0ZWQoKQp7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKICAgIHsKICAgICAgICB2aXNpdGRbaV0gPSBmYWxzZTsKICAgIH0KfQpib29sIGRmcyhpbnQgcywgaW50IHQsIGludCBjKQp7CiAgICBpZiAodmlzaXRkW3NdKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIHZpc2l0ZFtzXSA9IHRydWU7CiAgICBpZiAocyA9PSB0KQogICAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKHMgPiBuKQogICAgICAgIHJldHVybiBmYWxzZTsKICAgIGJvb2wgYW5zID0gZmFsc2U7CiAgICBmb3IgKGF1dG8gaSA6IGFkaltzXSkKICAgIHsKICAgICAgICBpZiAoaS5zZWNvbmQgPT0gYykKICAgICAgICB7CiAgICAgICAgICAgIGFucyA9IGFucyB8fCBkZnMoaS5maXJzdCwgdCwgYyk7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIGFuczsKfQp2b2lkIHNvbHZlKCkKewogICAgaW50IG07CiAgICBjaW4gPj4gbiA+PiBtOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtOyBpKyspCiAgICB7CiAgICAgICAgaW50IHMsIGQsIGM7CiAgICAgICAgY2luID4+IHMgPj4gZCA+PiBjOwogICAgICAgIGFkaltzXS5wdXNoX2JhY2soe2QsIGN9KTsKICAgICAgICBhZGpbZF0ucHVzaF9iYWNrKHtzLCBjfSk7CiAgICB9CiAgICBpbnQgcTsKICAgIGNpbiA+PiBxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBxOyBpKyspCiAgICB7CgogICAgICAgIGludCB1LCB2OwogICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgaW50IGFucyA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPD0gMTAwOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBjbGVhclZpc2l0ZWQoKTsKICAgICAgICAgICAgaWYgKGRmcyh1LCB2LCBpKSkKICAgICAgICAgICAgICAgIGFucysrOwogICAgICAgIH0KICAgICAgICBjb3V0IDw8IGFucyA8PCBlbmRsOwogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGludCB0ID0gMTsKICAgIC8vIGNpbj4+dDsKICAgIC8vIGdvOwogICAgd2hpbGUgKHQtLSkKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgICAgIGNvdXQgPDwgIlxuIjsKICAgIH0KICAgIHJldHVybiAwOwp9