GIST 하우스 중고장터에서는 돈을 특정 물건으로 바꿔주거나, 특정 물건을 다른 특정 물건으로 바꿔주는 이벤트를 진행하고 있다. 특정 물건을 특정 물건으로 바꿀 때는 추가적인 돈이 오갈 수 있다. GIST 하우스 중고장터는 무한히 많은 돈과 물건을 갖고 있기 때문에, 모든 거래는 재화가 존재하는 한 무한히 많이 할 수 있다. 단, 고객은 한 번에 물건을 최대 하나까지만 들고 있을 수 있다.
GIST 하우스 중고장터 앱 개발팀은 물물교환을 통해 돈 복사가 가능한지 추적하고 있다. 예를 들어 다음과 같은 거래들이 존재한다고 가정하자.
이들 중 개발팀이 리스트 $L_1 = \left\{t_1, t_2, t_3\right\}$에 든 거래만 허용한다고 가정하자. 그렇다면, $t_1, t_2, t_3$를 이 순서대로 선택하면 돈 $20$원을 돈 $21$원으로 늘릴 수 있다. 그리고 이를 무한히 반복하면 돈을 무한정 늘릴 수 있다. 이렇게 돈이 복사되면 대한민국 경제에 악영향을 끼칠 수 있기 때문에, 개발팀은 그런 상황을 막고 싶다. 따라서 개발팀은 거래들의 리스트가 주어지면 그 리스트가 안전한지 판별하고 싶다.
리스트의 안전도는 다음과 같이 정의된다.
예를 들어, 리스트 $L_1 = \left\{t_1, t_2, t_3\right\}$의 안전도는 $20$이다. $20$원의 돈을 갖고 가장 먼저 $t_1, t_2, t_3$를 선택하기를 반복하면 되기 때문이다. 그러나 $19$원의 돈을 갖고 있는 사람은 어떻게 하더라도 돈을 무한정 늘릴 수 없다. 또 리스트 $L_2 = \left\{t_3, t_4, t_5\right\}$의 안전도는 $7$이다.
한편 리스트 $L_3 = \left\{t_2, t_3, t_4\right\}$의 안전도는 $\infty$이다. $t_2$와 $t_4$를 선택하기를 반복하면 돈을 무한정 늘릴 수 있을 것 같아 보이지만, $1$번 물건 또는 $2$번 물건을 구할 수 있는 방법이 없어 그러한 거래를 시도할 수 없기 때문이다.
물물교환 거래 리스트가 주어지면 그 리스트의 안전도를 측정하는 프로그램을 작성하시오.
첫째 줄에 물건의 개수 $N$과 물물교환 거래 리스트의 길이 $M$이 주어진다. ($1 \leq N \leq 1\,000, 1 \leq M \leq \min\left(N^2+N, 3\,000\right)$)
둘째 줄부터 $M$개의 줄에 걸쳐, 물물교환 거래 리스트 $L$의 정보가 다음 다섯 가지 형식 중 하나로 주어진다.
$i, i_1, i_2$는 $1$ 이상 $N$ 이하의 정수이다. $c$는 $1$ 이상 $1\,000$ 이하의 정수이다. 각각의 수는 공백으로 구분되어 주어진다.
거래 리스트 $L$ 내의 $3$, $4$, $5$번 형식 정보는 각각 $i_1 \neq i_2$를 만족시킨다.
$1$번 형식의 임의의 두 정보가 같은 $i$를 공유하지 않는다.
$2$번 형식의 임의의 두 정보가 같은 $i$를 공유하지 않는다.
$3$번, $4$번 또는 $5$번 형식 중 하나로 들어온 임의의 두 정보가 같은 $i_1$과 $i_2$를 동시에 공유하지 않는다. 예를 들어 3 1 2와 4 1 1 2는 동시에 입력으로 주어지지 않는다. 그러나 3 1 2와 3 1 3는 동시에 입력으로 주어질 수 있는데, 이 둘은 $i_1$을 공유하더라도 $i_2$는 공유하지 않기 때문이다.
모든 거래는 역을 보장하지 않는다. 예를 들어 입력 3 1 2는 $2$번 물건으로 $1$번 물건을 교환할 수 있음을 의미하지 않는다.
리스트의 안전도를 출력한다. 리스트의 안전도가 $\infty$라면 문자열 INF를 출력한다.