돈 복사
시간 제한2초메모리 제한1024 MB
주어진 교환 목록에서 돈을 무한히 불릴 수 있는 최소 초기 금액을 구하고, 그런 금액이 없으면 INF를 출력합니다.
문제
GIST 하우스 중고장터는 돈을 특정 물건으로 바꾸거나, 특정 물건을 다른 특정 물건으로 바꾸는 이벤트를 진행한다. 물건끼리 바꿀 때는 돈이 추가로 오갈 수도 있다. 중고장터는 돈과 물건을 무한히 가지고 있으므로, 모든 거래는 재화가 남아 있는 한 무한히 반복할 수 있다. 단, 고객은 한 번에 물건을 최대 하나까지만 들고 있을 수 있다.
예를 들어 다음 거래들이 존재한다고 하자.
- : 사용자가 번 물건을 원에 산다.
- : 사용자가 번 물건에 원을 더해 번 물건과 교환한다.
- : 사용자가 번 물건을 팔고 원을 받는다.
- : 사용자가 번 물건을 번 물건과 교환하고 원을 추가로 받는다.
- : 사용자가 번 물건을 원에 산다.
이 중 개발팀이 리스트 에 든 거래만 허용한다고 하자. 그러면 를 이 순서로 선택해 원을 원으로 늘릴 수 있다. 이를 무한히 반복하면 돈을 무한정 늘릴 수 있다. 돈이 이렇게 복사되면 대한민국 경제에 악영향을 끼칠 수 있어서, 개발팀은 이를 막고 싶어 한다. 따라서 개발팀은 거래 리스트가 주어지면 그 리스트가 안전한지 판별하려 한다.
리스트의 안전도는 다음과 같이 정의된다.
- 어떤 사람이 원을 초기 자금으로 갖고 거래를 반복하여 돈을 무한정 늘릴 수 있다면, 리스트의 안전도는 의 최솟값이다. 그러한 가 존재하지 않으면 리스트의 안전도는 이다. 이때 돈을 늘리기 위해 모든 물건을 팔 필요는 없다.
예를 들어 리스트 의 안전도는 이다. 원을 가지고 를 차례로 고르기를 반복하면 되기 때문이다. 그러나 원을 가진 사람은 어떻게 해도 돈을 무한정 늘릴 수 없다. 또 리스트 의 안전도는 이다.
한편 리스트 의 안전도는 이다. 와 를 반복해서 고르면 돈을 무한정 늘릴 수 있을 것 같지만, 번 물건이나 번 물건을 구할 방법이 없어 그런 거래를 시도할 수 없기 때문이다.
물물교환 거래 리스트가 주어지면 그 리스트의 안전도를 측정하는 프로그램을 작성하시오.
입력
첫째 줄에 물건의 개수 과 물물교환 거래 리스트의 길이 이 주어진다. ()
둘째 줄부터 개의 줄에 걸쳐 거래 리스트 의 정보가 다음 다섯 가지 형식 중 하나로 주어진다.
- : 원을 들여 번 물건을 살 수 있다.
- : 번 물건을 팔아 원을 벌 수 있다.
- : 번 물건을 번 물건과 교환할 수 있다.
- : 번 물건과 원을 번 물건으로 교환할 수 있다.
- : 번 물건을 번 물건과 원으로 교환할 수 있다.
, , 는 이상 이하의 정수이다. 는 이상 이하의 정수이다. 각각의 수는 공백으로 구분되어 주어진다.
거래 리스트 안의 , , 번 형식은 모두 를 만족한다.
번 형식의 임의의 두 정보는 같은 를 공유하지 않는다.
번 형식의 임의의 두 정보는 같은 를 공유하지 않는다.
번, 번, 번 형식 중 하나로 들어온 임의의 두 정보는 같은 과 를 동시에 공유하지 않는다. 예를 들어 3 1 2와 4 1 1 2는 동시에 입력으로 주어지지 않는다. 그러나 3 1 2와 3 1 3은 동시에 입력으로 주어질 수 있는데, 이 둘은 은 공유하지만 는 공유하지 않기 때문이다.
모든 거래는 역방향을 보장하지 않는다. 예를 들어 입력 3 1 2는 번 물건으로 번 물건을 교환할 수 있다는 뜻이 아니다.
출력
리스트의 안전도를 출력한다. 리스트의 안전도가 라면 문자열 INF를 출력한다.