#include #include #include #include using namespace std; void floyd(double **g, int c) { for (int k = 0; k < c; k++) { for (int i = 0; i < c; i++) { for (int j = 0; j < c; j++) { double c = g[i][k] * g[k][j]; if (c > 0 && c < g[i][j]) { g[i][j] = c; } } } } } int main() { do { int c, r; cin >> c; if (c==0) { break; } map currs; for (int i = 0; i < c; i++) { string curr; cin >> curr; currs[curr] = i; //cout << curr << "=" << i << endl; } double **g; g = new double*[200]; for (int i = 0; i < c; i++) { g[i] = new double[200]; for (int j = 0; j < c; j++) { if (i == j) { g[i][j] = 1; } else { g[i][j] = 0; } } } cin >> r; for (int i = 0; i < r; i++) { string cfrom, cto; char c; int ufrom, uto; cin >> cfrom >> cto >> ufrom >> c >> uto; int nfrom = currs[cfrom], nto = currs[cto]; g[nfrom][nto] = (double)ufrom / uto; } /*for (int i = 0; i < c; i++) { for (int j = 0; j < c; j++) { cout << g[i][j] << " "; } cout << endl; }*/ floyd(g, c); for (int i = 0; i < c; i++) { for (int j = 0; j < c; j++) { cout << g[i][j] << " "; } cout << endl; } bool arb = false; for (int i = 0; i < c; i++) { if (fabs(g[i][i] - 1) > 0.0000000001) { cout << "Arbitrage" << endl; arb = true; break; } } if (!arb) { cout << "Ok" << endl; } } while(true); return 0; }