#include using namespace std; typedef long long ll; typedef long double ld; typedef pair ii; typedef vector vi; typedef vector vvi; typedef vector vvvi; typedef vector vvvvi; typedef vector vii; #define x first #define y second #define pb push_back #define eb emplace_back #define all(v) (v).begin(), (v).end() unordered_map M; ll m = 0; vector>> adj; ll get_index(string s) { if (M.find(s) == M.end()) { M[s] = m; m++; adj.pb(vector>()); } return M[s]; } ld dfs(ll i, ll p, ll j, ld a) { if (i == j) return a; for (pair t : adj[i]) { if (t.x == p) continue; ld r = dfs(t.x, i, j, a*t.y); if (r > 0) return r; } return -1; } void run() { ll n, q; cin >> n >> q; for (ll i = 0; i < n; i++) { ld a, b; string c, d, e; cin >> a >> c >> d >> b >> e; ll u1 = get_index(c), u2 = get_index(e); adj[u1].pb({u2, b}); adj[u2].pb({u1, 1/b}); } for (ll i = 0; i < q; i++) { ld a; string b, c, d; cin >> a >> b >> c >> d; ld r = dfs(get_index(b), -1, get_index(d), a); if (r > 0) cout << r << endl; else cout << "impossible" << endl; } } signed main() { ios_base::sync_with_stdio(false); cin.tie(0); cout << fixed << setprecision(20); // With "fixed", small numbers are printed as "0.0000000..." run(); return 0; }