/*
* * author: attacker
* * created: 01.04.2026 17:07:48
*/
#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#include "algo/debug.h"
#else
#define debug(...) 1
#endif
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
#define bpc __builtin_popcount
#define size(v) (int)(v.size())
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int n, m;
cin >> n >> m;
map<string, int> id;
int num = 0;
vector<tuple<string, string, int>> a(m);
for (int i = 0; i < m; i++) {
string x, y;
int z;
cin >> x >> y >> z;
a[i] = {x, y, z};
if (!id.count(x)) {
id[x] = num++;
}
if (!id.count(y)) {
id[y] = num++;
}
}
vector<vector<pair<int, int>>> g(n);
for (auto& [x, y, z] : a) {
g[id[x]].push_back({id[y], z});
}
int q;
cin >> q;
while (q--) {
string a, b;
cin >> a >> b;
int s = id[a];
int f = id[b];
vector<int> mn(n, int(1e9));
vector<bool> seen(n, false);
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
mn[s] = 0;
q.push({0, s});
while (!q.empty()) {
auto [total, u] = q.top();
q.pop();
if (seen[u]) continue;
seen[u] = true;
for (auto [i, w] : g[u]) {
if (mn[u] + w < mn[i]) {
mn[i] = mn[u] + w;
q.push({mn[i], i});
}
}
}
if (mn[f] != int(1e9)) {
cout << mn[f] << '\n';
} else {
cout << "Roger" << '\n';
}
}
return 0;
}