아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

차익거래 판별

면접 대비

시간 제한1초메모리 제한128 MB

요약
통화 간 환율이 주어질 때, 어떤 통화에서 출발해 교환을 반복하여 처음보다 더 많은 양으로 돌아올 수 있는지 판정합니다.
난이도

보통10점 중 7점

유형
그래프, 최단 경로, 수학, 정수론
정답자
아직 제출이 없습니다

문제

해외로 여행을 가면 자기 돈을 여러 나라의 통화로 환전해야 할 때가 많습니다. 이 문제는 여러 통화와 그들 사이의 환율을 다룹니다. 주어진 환율 집합이 안전한지, 즉 이른바 차익거래(arbitrage) 가 가능한지를 판별하는 것이 목표입니다.

차익거래란 환율의 불균형을 이용해 위험 없이 이익을 얻는 일련의 환전 과정을 말합니다. 여기서 이익을 얻는다는 것은, 어떤 통화를 일정량 가지고 시작해서 여러 번 환전한 뒤에 같은 통화를 처음보다 더 많이 가지게 되는 것을 뜻합니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다.

각 테스트 케이스의 첫 줄에는 통화의 개수를 나타내는 양의 정수 CC (1≤C≤2001 \le C \le 200) 가 주어집니다.

둘째 줄에는 CC 개의 통화 코드가 공백으로 구분되어 주어집니다. 각 코드는 대문자 3글자로 이루어지며, 한 테스트 케이스 안의 코드는 모두 서로 다릅니다.

셋째 줄에는 사용할 수 있는 환율의 개수를 나타내는 정수 RR (0≤R≤C⋅(C−1)0 \le R \le C \cdot (C-1)) 이 주어집니다. 이어지는 RR 개의 줄에는 각각 하나의 환율이 다음 형식으로 주어집니다.

CUR1 CUR2 A:B

이는 통화 CUR1 을 AA 단위 지불하면 통화 CUR2 를 BB 단위 받는다는 뜻입니다. 1≤A,B≤1001 \le A, B \le 100 이며 두 통화는 서로 다름이 보장됩니다.

입력의 끝은 0 하나만 있는 줄로 표시되며, 이 줄은 처리하지 않습니다.

출력

각 테스트 케이스마다 한 줄을 출력합니다. 이익을 낼 수 있는 환전 과정이 하나라도 존재하면 Arbitrage 를, 그렇지 않으면 Ok 를 출력합니다.

여기서 이익이란 어떤 통화를 일정량 가지고 시작해서 몇 번이든 환전한 뒤에 같은 통화를 처음보다 더 많이 가지게 되는 것을 뜻합니다.

예제1

  1. 예제 1

    입력
    2
    CZK EUR
    2
    CZK EUR 25:1
    EUR CZK 1:25
    2
    GBP USD
    2
    USD GBP 8:5
    GBP USD 5:9
    3
    BON DEM CZK
    3
    DEM BON 1:6
    BON CZK 1:5
    DEM CZK 1:20
    3
    CZK EUR GBP
    3
    CZK EUR 24:1
    EUR GBP 5:4
    GBP CZK 1:30
    3
    CZK USD GBP
    4
    CZK USD 28:1
    CZK GBP 31:1
    GBP CZK 1:31
    USD GBP 1:1
    0
    
    예상 출력
    Ok
    Arbitrage
    Ok
    Ok
    Arbitrage