#include #include #include #include using namespace std; typedef map IndexTable; struct Rate { int nom; int denom; Rate(): nom(0), denom(0) {} Rate(int n, int d): nom(n), denom(d) {} bool valid() const { return nom && denom; } Rate reverse() const { return Rate(denom, nom); } bool sameAs(const Rate& r) const { return nom*r.denom == denom*r.nom; } friend istream& operator>>(istream& is, Rate& r) { char delim; return is >> r.nom >> delim >> r.denom; } friend ostream& operator<<(ostream& os, const Rate& r) { return os << r.nom << ":" << r.denom; } Rate operator*(const Rate& r) const { return Rate(nom*r.nom, denom*r.denom); } }; typedef vector XchgTable; int main(int argc, char* argv[]) { int C; while (cin >> C) { if (!C) break; string str; IndexTable index; XchgTable table; table.resize(C*C, Rate()); for (int i=0; i> str; index[str] = i; table[i+i*C] = Rate(1, 1); } int R; cin >> R; for (int i=0; i> str; int iA = index[str]; cin >> str; int iB = index[str]; cin >> table[iB+iA*C]; } for (int y=0; y