금융 쓰나미

은행들의 잔액과 서로 간 대출 정보가 주어질 때, 자산이 한계값 미만으로 떨어지는 은행을 안전하지 않다고 반복 표시하고, 실패하는 순서대로 나열합니다.

보통5시뮬레이션그래프구현아직 제출이 없습니다시간 제한10초메모리 제한512 MB

문제

은행끼리는 서로 돈을 빌려준다. 경제 사정이 나쁠 때 어떤 은행이 파산하면 그 은행은 빌린 돈을 갚지 못할 수 있다. 은행의 총자산은 현재 잔고와 다른 은행에 빌려준 돈을 더한 값이다. 아래 그림은 은행 다섯 곳을 나타낸다. 각 은행의 현재 잔고는 차례대로 25, 125, 175, 75, 181백만 링깃(RM)이다. 노드 1에서 노드 2로 향하는 간선은 은행 1이 은행 2에 4000만 RM을 빌려주었다는 뜻이다.

은행의 총자산이 정해진 한도 limit보다 작으면 그 은행은 위험하다. 위험한 은행은 빌린 돈을 돌려주지 못하므로 그 은행에 돈을 빌려준 은행은 이 대출을 자기 총자산에 넣을 수 없다. 그 결과 빌려준 은행의 총자산도 한도보다 작아지면 그 은행 역시 위험해진다.

위험한 은행은 다음 과정으로 정한다.

  1. 아직 위험하지 않은 모든 은행의 총자산을 계산한다. 이때 대출은 빌려 간 은행이 아직 위험하지 않은 경우에만 더한다.
  2. 총자산이 limit보다 작은 은행을 모두 같은 시점에 위험하다고 판정한다. 총자산이 limit과 같으면 안전하다.
  3. 새로 위험해진 은행이 없으면 끝내고, 있으면 1로 돌아간다.

위험한 은행을 모두 찾는 프로그램을 작성하시오.

입력

첫째 줄에 테스트 케이스의 수 TT가 주어진다. (1T1001 \le T \le 100)

각 테스트 케이스의 첫 줄에는 은행의 수 nn과 은행이 안전하기 위한 최소 총자산 limit이 주어진다. (1n101 \le n \le 10, 100limit1000100 \le \text{limit} \le 1000)

이어서 nn개의 줄에 ID가 00부터 n1n-1인 은행의 정보가 차례대로 주어진다. 각 줄의 첫 번째 수는 은행의 잔고이고, 두 번째 수는 이 은행에서 돈을 빌려 간 은행의 수 kk이다. 그 뒤에 두 수로 이루어진 쌍 kk개가 이어진다. 각 쌍은 돈을 빌려 간 은행 하나를 나타내며, 첫 번째 수는 빌려 간 은행의 ID이고 두 번째 수는 빌려 간 금액이다.

잔고와 금액은 음이 아닌 수이며 100.5처럼 소수점이 있을 수 있다. 총자산과 limit은 반올림 없이 정확한 값으로 비교한다.

출력

각 테스트 케이스마다 한 줄을 출력한다. 줄은 Case # x:로 시작하며, xx는 1부터 시작하는 테스트 케이스 번호이다. 콜론 바로 뒤에 위험한 은행의 ID를 공백 하나로 구분해 출력한다.

ID는 위험하다고 판정된 시점이 이른 순서로 출력하고, 같은 시점에 판정된 은행끼리는 ID가 작은 순서로 출력한다. 위험한 은행이 없으면 Case # x:만 출력한다.