#include<bits/stdc++.h>
using namespace std;
using dvec = vector<double>;
using svec = vector<string>;
using smat = vector<svec>;
struct Solution {
using sset = unordered_set<string>;
using sdpair = pair<string,double>;
using sdvec = vector<sdpair>;
using sdmap = unordered_map<string,sdvec>;
bool undefined(const sdmap& mp, const string& var) {
return mp.find(var) == mp.end(); }
double dfs(string& src, string& dest, sset& visited, sdmap &mp, double v) {
visited.insert(src);
for (auto [next,w]: mp[src])
if (visited.find(next) == visited.end()) {
const auto x = v*w;
if (next == dest)
return x;
const auto y = dfs(next,dest,visited,mp,x);
if (y != -1.0)
return y; }
visited.erase(src);
return -1.0; }
dvec calcEquation(smat& equations, dvec& values, smat& queries) {
const int N = equations.size(), Q = queries.size();
sdmap mp;
for(int i = 0; i < N; ++i) {
const auto A = equations[i][0], B = equations[i][1];
const auto v = values[i];
mp[B].emplace_back(A,v),
mp[A].emplace_back(B,1.0/v); }
dvec ans(Q);
for(int i = 0; i < Q; ++i) {
auto src = queries[i][1], dest = queries[i][0];
if (undefined(mp,src) or undefined(mp,dest))
ans[i] = -1.0;
else if (src == dest)
ans[i] = 1.0;
else {
sset visited;
ans[i] = dfs(src,dest,visited,mp,1.0); } }
return ans; } };
int main() {
const int P = 2;
int N, Q; cin.tie(nullptr)->sync_with_stdio(false), cin >> N >> Q;
smat equation(N,svec(P)), query(Q,svec(P));
dvec value(N);
for (int i = 0; i < N; ++i)
cin >> equation[i][0] >> equation[i][1] >> value[i];
for (int i = 0; i < Q; ++i)
cin >> query[i][0] >> query[i][1];
cout << fixed << setprecision(5);
for (auto ans: Solution().calcEquation(equation,value,query))
cout << ans << ' ';
return 0; }
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAp1c2luZyBkdmVjICAgPSB2ZWN0b3I8ZG91YmxlPjsKdXNpbmcgc3ZlYyAgID0gdmVjdG9yPHN0cmluZz47CnVzaW5nIHNtYXQgICA9IHZlY3RvcjxzdmVjPjsKICAgIApzdHJ1Y3QgU29sdXRpb24gewogICAgdXNpbmcgc3NldCAgID0gdW5vcmRlcmVkX3NldDxzdHJpbmc+OwogICAgdXNpbmcgc2RwYWlyID0gcGFpcjxzdHJpbmcsZG91YmxlPjsKICAgIHVzaW5nIHNkdmVjICA9IHZlY3RvcjxzZHBhaXI+OwogICAgdXNpbmcgc2RtYXAgID0gdW5vcmRlcmVkX21hcDxzdHJpbmcsc2R2ZWM+OwogICAgYm9vbCB1bmRlZmluZWQoY29uc3Qgc2RtYXAmIG1wLCBjb25zdCBzdHJpbmcmIHZhcikgewogICAgICAgIHJldHVybiBtcC5maW5kKHZhcikgPT0gbXAuZW5kKCk7IH0KICAgIGRvdWJsZSBkZnMoc3RyaW5nJiBzcmMsIHN0cmluZyYgZGVzdCwgc3NldCYgdmlzaXRlZCwgc2RtYXAgJm1wLCBkb3VibGUgdikgewogICAgCXZpc2l0ZWQuaW5zZXJ0KHNyYyk7CiAgICAgICAgZm9yIChhdXRvIFtuZXh0LHddOiBtcFtzcmNdKQogICAgICAgIAlpZiAodmlzaXRlZC5maW5kKG5leHQpID09IHZpc2l0ZWQuZW5kKCkpIHsKICAgICAgICAgICAgCWNvbnN0IGF1dG8geCA9IHYqdzsKICAgICAgICAgICAgCWlmIChuZXh0ID09IGRlc3QpCiAgICAgICAgICAgICAgICAJcmV0dXJuIHg7CiAgICAgICAgICAgIAljb25zdCBhdXRvIHkgPSBkZnMobmV4dCxkZXN0LHZpc2l0ZWQsbXAseCk7CiAgICAgICAgICAgIAlpZiAoeSAhPSAtMS4wKQogICAgICAgICAgICAJCXJldHVybiB5OyB9CiAgICAJdmlzaXRlZC5lcmFzZShzcmMpOyAKICAgICAgICByZXR1cm4gLTEuMDsgfQogICAgZHZlYyBjYWxjRXF1YXRpb24oc21hdCYgZXF1YXRpb25zLCBkdmVjJiB2YWx1ZXMsIHNtYXQmIHF1ZXJpZXMpIHsKICAgICAgICBjb25zdCBpbnQgTiA9IGVxdWF0aW9ucy5zaXplKCksIFEgPSBxdWVyaWVzLnNpemUoKTsKICAgICAgICBzZG1hcCBtcDsKICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgTjsgKytpKSB7CiAgICAgICAgICAgIGNvbnN0IGF1dG8gQSA9IGVxdWF0aW9uc1tpXVswXSwgQiA9IGVxdWF0aW9uc1tpXVsxXTsKICAgICAgICAgICAgY29uc3QgYXV0byB2ID0gdmFsdWVzW2ldOwogICAgICAgICAgICBtcFtCXS5lbXBsYWNlX2JhY2soQSx2KSwKICAgICAgICAgICAgbXBbQV0uZW1wbGFjZV9iYWNrKEIsMS4wL3YpOyB9CiAgICAgICAgZHZlYyBhbnMoUSk7CiAgICAgICAgZm9yKGludCAgaSA9IDA7IGkgPCBROyArK2kpIHsKICAgICAgICAJYXV0byBzcmMgPSBxdWVyaWVzW2ldWzFdLCBkZXN0ID0gcXVlcmllc1tpXVswXTsKICAgICAgICAJaWYgKHVuZGVmaW5lZChtcCxzcmMpIG9yIHVuZGVmaW5lZChtcCxkZXN0KSkKICAgICAgICAgICAgCWFuc1tpXSA9IC0xLjA7CiAgICAgICAgICAgIGVsc2UgaWYgKHNyYyA9PSBkZXN0KQogICAgICAgICAgICAJYW5zW2ldID0gMS4wOyAgCQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgCXNzZXQgdmlzaXRlZDsKICAgICAgICAgICAgCWFuc1tpXSA9IGRmcyhzcmMsZGVzdCx2aXNpdGVkLG1wLDEuMCk7IH0gfQogICAgICAgIHJldHVybiBhbnM7IH0gfTsKCmludCBtYWluKCkgewogICAgY29uc3QgaW50IFAgPSAyOwogICAgaW50IE4sIFE7IGNpbi50aWUobnVsbHB0ciktPnN5bmNfd2l0aF9zdGRpbyhmYWxzZSksIGNpbiA+PiBOID4+IFE7CiAgICBzbWF0IGVxdWF0aW9uKE4sc3ZlYyhQKSksIHF1ZXJ5KFEsc3ZlYyhQKSk7CiAgICBkdmVjIHZhbHVlKE4pOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyArK2kpCiAgICAgICAgY2luID4+IGVxdWF0aW9uW2ldWzBdID4+IGVxdWF0aW9uW2ldWzFdID4+IHZhbHVlW2ldOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBROyArK2kpCiAgICAgICAgY2luID4+IHF1ZXJ5W2ldWzBdID4+IHF1ZXJ5W2ldWzFdOwogICAgY291dCA8PCBmaXhlZCA8PCBzZXRwcmVjaXNpb24oNSk7CiAgICBmb3IgKGF1dG8gYW5zOiBTb2x1dGlvbigpLmNhbGNFcXVhdGlvbihlcXVhdGlvbix2YWx1ZSxxdWVyeSkpCiAgICAgICAgY291dCA8PCBhbnMgPDwgJyAnOwogICAgcmV0dXJuIDA7IH0KICAgIA==