#include #include #include #include using namespace std; #define FOR(q,n) for(int q=0; q nazvy; int getId(string nazov) { return nazvy[nazov]; } int N; #define MAX 400 long double mat[MAX][MAX]; #define INF 1.0e50 int init() { nazvy.clear(); scanf("%d", &N); if (N==0) return 0; FOR(q,N) FOR(w,N) mat[q][w]=INF; FOR(q, N) mat[q][q]=0; FOR(q,N) { char tmp[100]; scanf("%s",tmp); nazvy[tmp]=q; } int m; scanf("%d", &m); FOR(q,m) { char tmp1[100]; char tmp2[100]; int a,b; scanf("%s %s %d:%d", tmp1, tmp2, &a, &b); int i1,i2; i1=getId(tmp1); i2=getId(tmp2); // printf("-- %d %d %d %d\n",i1,i2,a,b); mat[i1][i2] = std::min(mat[i1][i2], (long double)log(a) - (long double) log(b)); } //FOR(i ,N) { //FOR(j,N) //printf("%Lf ", mat[i][j]); //printf("\n"); //} return 1; } void solve() { FOR(k,N) FOR(i,N) FOR(j,N) mat[i][j] = std::min(mat[i][j], mat[i][k]+mat[k][j]); int ok=true; FOR(i, N) if (mat[i][i] <0) ok=false; if (ok) printf("Ok\n"); else printf("Arbitrage\n"); } int main() { while (init()) solve(); }