#include #include #include #include #include using namespace std; int curCount; double matrix[200][200]; int tried[200]; int arbitrage(int start, int current = -1, double rate = 1) { int i, current2; //printf("start = %d, current = %d, rate = %f\n", start, current, rate); if (start == current) { if (rate > 1) return 1; else return 0; } current2 = current == -1 ? start : current; for (i = 0; i < curCount; i++) { if (i == current2 || tried[i]) continue; //printf("i = %d\n", i); if (matrix[current2][i] != 0) { tried[i] = 1; if (arbitrage(start, i, rate * matrix[current2][i])) return 1; } } return 0; } int main() { int i, j, n, m1, m2, r1, r2, found; string name; map names; while (1) { scanf("%d", &curCount); if (curCount == 0) break; for (i = 0; i < curCount; i++) { cin >> name; names[name] = i; } for (i = 0; i < curCount; i++) { for (j = 0; j < curCount; j++) matrix[i][j] = 0; } scanf("%d", &n); for (i = 0; i < n; i++) { cin >> name; m1 = names.find(name)->second; cin >> name; m2 = names.find(name)->second; scanf("%d:%d", &r1, &r2); matrix[m1][m2] = (double)r2 / r1; } found = 0; for (i = 0; i < curCount; i++) { for(j = 0; j < curCount; j++) tried[j] = 0; found = arbitrage(i); if (found) break; } if (found) printf("Arbitrage\n"); else printf("Ok\n"); } return 0; }