#include #include #include #include #include using namespace std; int n, i, j, aa, bb, m, start; map curs; char s[310], s2[310]; pair pll; vector > > a[200]; int left[105], right[105]; bool was[200], found; bool vacsi() { int i, lsd=1, rsd=1, k; int ls[1000], rs[1000], rem; ls[0] = 1; rs[0] = 1; for (i = 1; i <= 100; i++) { for (j = 0; j < left[i]; j++) { rem = 0; for (k = 0; k < lsd; k++) { ls[k] = ls[k] * i + rem; rem = ls[k] / 10; ls[k] %= 10; } while (rem > 0) { ls[lsd++] = rem % 10; rem /= 10; } } for (j = 0; j < right[i]; j++) { rem = 0; for (k = 0; k < rsd; k++) { rs[k] = rs[k] * i + rem; rem = rs[k] / 10; rs[k] %= 10; } while (rem > 0) { rs[rsd++] = rem % 10; rem /= 10; } } } //for (i = lsd-1; i >= 0; i--) printf("%d", ls[i]); printf(":"); //for (i = rsd-1; i >= 0; i--) printf("%d", rs[i]); printf("\n"); //printf("%d %d\n", ll,rr); if (lsd < rsd) return true; if (lsd > rsd) return false; for (i = lsd-1; i >= 0; i--) { if (ls[i] < rs[i]) return true; if (ls[i] > rs[i]) return false; } return false; } void go(int kam) { int i; if (kam == start) { if (vacsi()) found = true; return; } was[kam] = true; for (i = a[kam].size()-1; i >= 0; i--) { if (was[a[kam][i].first]) continue; left[a[kam][i].second.first]++; right[a[kam][i].second.second]++; go(a[kam][i].first); left[a[kam][i].second.first]--; right[a[kam][i].second.second]--; } was[kam] = false; } int main() { while (scanf("%d", &n), n > 0) { curs.clear(); for (i = 1; i <= 100; i++) left[i] = right[i] = 0; for (i = 0; i < n; i++) { a[i].clear(); scanf("%s", s); curs[s] = i; } scanf("%d", &m); while (m--) { scanf("%s%s%d:%d", s, s2, &aa, &bb); pll.first = aa; pll.second = bb; a[curs[s]].push_back(make_pair(curs[s2], pll)); } found = false; for (start = 0; start < n; start++) { for (i = a[start].size()-1; i >= 0; i--) { left[a[start][i].second.first]++; right[a[start][i].second.second]++; go(a[start][i].first); left[a[start][i].second.first]--; right[a[start][i].second.second]--; } } if (found) printf("Arbitrage\n"); else printf("Ok\n"); } return 0; }