#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef unsigned int uint; typedef unsigned char uchar; typedef unsigned long long ulonglong; bool hasInput(); void readInput(); bool calculate(); void writeOutput(); void reset(); uint numRows = 0; int n; string* meny; int cn; double m[200][200]; int main(int argc, char **argv) { cin >> n; while (n > 0) { readInput(); //writeOutput(); //cout << endl; if (calculate()) cout << "Arbitrage" << endl; else cout << "Ok" << endl; //writeOutput(); cin >>n; } return 0; } bool hasInput() { cin >> numRows; return numRows > 0; } void readInput() { meny = new string[n]; for (int r = 0; r < n; ++r) { cin >> meny[r]; } cin >> cn; //m = new float[n][n]; for (int rr = 0; rr < cn; ++rr) { string m1, m2; int k1, k2; cin >> m1; cin >> m2; cin >> k1; char ch; cin >> ch; cin >> k2; for (int i = 0; i < n; ++i) { if(meny[i] == m1) { for (int j = 0; j < n; ++j) { if(meny[j] == m2) { m[i][j] = (float)k1 / (float)k2; } } } } } } double calc(int i, int j) { if (m[i][j] != 0) return m[i][j]; for (int k=0; k < n; k++) { if (k == i) continue; if (m[k][j] != 0) { m[i][j] = m[k][j] * calc(i, k); return m[i][j]; } } return 0; } bool calculate() { for (int i = 0; i < cn; i++) { for (int j = 0; j < cn; j++) { if (i == j) continue; bool test = true; if (m[i][j] == 0) calc(i,j); if (m[j][i] == 0) calc(j,i); if (m[i][j] != 0 && m[j][i] != 0 ) { if ((m[i][j] * m[j][i]) < 1) { //cout << " TRUE" << endl; return true; } } } } return false; } void writeOutput() { for (int i = 0; i < cn; ++i) { for (int j = 0; j < cn; ++j) cout << m[i][j] << " "; cout << endl; } }