type Tzlomek = record a, b : longint; end; var pocet : longint; kody : array[1..200] of string[3]; transakce : array[1..200, 1..200] of TZlomek; dostupnost : array[1..200, 1..200] of TZlomek; i, j, k : longint; kod1, kod2 : string[4]; transakci, a, b : longint; pomer : string; radek : string; zmena, konec : boolean; nova, pom : TZlomek; function cisloMeny(kod : string) : longint; var i : longint; begin i := 1; while kody[i] <> kod do begin inc(i); end; cisloMeny := i; end; procedure prevedPomer(pomer : string; var a, b : longint); var i, err : longint; c1, c2 : longint; begin i := pos(':', pomer); val(copy(pomer, 1, i - 1), c1, err); val(copy(pomer, i + 1, length(pomer) - i), c2, err); a := c1; b := c2; end; function NSD(a, b : longint) : longint; var r : longint; begin r := a mod b; while r <> 0 do begin a := b; b := r; r := a mod b; end; NSD := b; end; procedure nasobek(x, y : Tzlomek; var z : TZlomek); var n : longint; begin z.a := x.a * y.a; z.b := x.b * y.b; n := NSD(z.a, z.b); z.a := z.a div n; z.b := z.b div n; end; function mensi(x, y : TZlomek) : boolean; begin mensi := (x.a / x.b) < (y.a / y.b); end; begin readln(pocet); while pocet <> 0 do begin konec := false; for i := 1 to 200 do begin for j := 1 to 200 do begin transakce[i, j].a := 0; transakce[i, j].b := 0; dostupnost[i, j].a := 0; dostupnost[i, j].b := 0; end; end; { writeln(NSD(23, 14));} for i := 1 to pocet do begin read(kod1); if kod1[1] = ' ' then begin delete(kod1, 1, 1); end; {kod1 := copy(radek, 1, 3); delete(radek, 1, 4);} kody[i] := kod1; {writeln(kod1);} end; readln(transakci); for i := 1 to transakci do begin readln(radek); kod1 := copy(radek, 1, 3); kod2 := copy(radek, 5, 3); pomer := copy(radek, 9, length(radek) - 8); prevedPomer(pomer, a, b); transakce[cisloMeny(kod1), cisloMeny(kod2)].a := a; transakce[cisloMeny(kod1), cisloMeny(kod2)].b := b; end; for i := 1 to pocet do begin for j := 1 to pocet do begin if transakce[i, j].a <> 0 then begin dostupnost[i, j] := transakce[i, j]; end; end; end; pom.a := 1; pom.b := 1; zmena := true; while (zmena) and not(konec) do begin zmena := false; for k := 1 to pocet do begin if dostupnost[k, k].a <> 0 then begin if mensi(dostupnost[k, k], pom) then begin writeln('Arbitrage'); konec := true; break; end; end; for i := 1 to pocet do begin if konec then break; if dostupnost[k, i].a <> 0 then begin for j := 1 to pocet do begin if dostupnost[i, j].a <> 0 then begin nasobek(dostupnost[k, i], dostupnost[i, j], nova); { writeln(nova.a, '/', nova.b);} if (dostupnost[k, j].a = 0) or (mensi(nova, dostupnost[k, j])) then begin dostupnost[k, j] := nova; zmena := true; if dostupnost[k, k].a <> 0 then begin if mensi(dostupnost[k, k], pom) then begin writeln('Arbitrage'); konec := true; break; end; end; end; end; end; end; end; end; end; { for i := 1 to pocet do begin for j := 1 to pocet do begin write(dostupnost[i, j].a, '/', dostupnost[i, j].b, ' '); end; writeln; end;} if not konec then begin writeln('Ok'); end; readln(pocet); end; end.