중앙은행은 한 나라의 통화 정책을 책임지는 기관으로, 다른 여러 은행을 감시하고 감독하는 일도 맡는다. 은행 계좌를 감시하는 간단한 감독 도구 역할을 하는 프로그램을 작성하라. 이 프로그램은 은행 요청들을 차례로 읽어 각 요청을 계좌에 적용하고, 모든 요청의 처리 결과를 출력한다.
입력은 여러 개의 시나리오로 이루어진다.
각 시나리오는 정수 $A$ ($0 < A \le 100$) 하나가 적힌 줄로 시작한다. $A$는 감독을 시작하는 시점에 존재하는 계좌의 수이다. 이어지는 $A$개의 줄은 각각 계좌 하나를 나타내며, 계좌 번호, 공백 하나, 그리고 그 계좌의 처음 잔액을 나타내는 음이 아닌 십진수로 이루어진다.
계좌 목록 다음에는 요청들이 한 줄에 하나씩 주어진다. 각 요청 줄은 명령어로 시작하고, 필요하면 공백 하나로 구분된 매개변수가 뒤따른다. 명령어는 다음과 같다.
| 명령어 | 의미 | 개수 | 매개변수 |
|---|---|---|---|
| create | 새 계좌 개설 | 1 | 새 계좌 번호 |
| deposit | 계좌에 입금 | 2 | 계좌 번호, 입금액 |
| withdraw | 계좌에서 출금 | 2 | 계좌 번호, 출금액 |
| transfer | 계좌 간 송금 | 3 | 보내는 계좌, 받는 계좌, 금액 |
한 시나리오의 요청 수는 $0$개 이상 $1000$개 이하이다. 한 시나리오의 요청들 뒤에는 end라는 단어가 적힌 줄과 빈 줄 하나가 오고, 그 뒤에 다음 시나리오가 이어진다. 전체 입력은 $A$ 자리에 $0$이 적힌 줄로 끝난다.
모든 계좌 번호는 십진 숫자 정확히 네 자리, 슬래시(/), 그리고 그 계좌를 운영하는 은행을 나타내는 숫자 한 자리로 이루어진다. 각 은행은 고유한 코드를 가지므로, 같은 네 자리 번호라도 은행 코드가 다르면 서로 다른 계좌이다.
모든 금액은 소수점 아래 정확히 두 자리로 표기된 음이 아닌 십진수이며, 어떤 금액도 $10000.00$을 넘지 않는다. 불필요한 앞자리 0은 없다. 즉, $1.00$보다 작은 금액만 0으로 시작할 수 있다.
각 요청마다 정확히 한 줄을 출력한다. 줄은 명령어로 시작하며, 명령어에 금액 매개변수가 있으면 명령어 바로 뒤에 공백 하나와 그 금액을 출력한다. 그다음 콜론(:), 공백 하나, 그리고 처리 결과를 출력한다.
create의 매개변수는 계좌 번호이므로 금액은 출력하지 않는다. 같은 은행에 같은 번호의 계좌가 이미 있으면 결과는 already exists이고, 그렇지 않으면 잔액 $0$인 계좌를 개설하고 ok를 출력한다.
create를 제외한 모든 명령어에서, 매개변수로 지정된 계좌가 존재하지 않으면 결과는 no such account이다. 필요한 계좌(transfer의 경우 두 계좌 모두)가 존재하면 아래 규칙을 적용한다.
deposit: 금액을 계좌 잔액에 더한다. 결과는 항상 ok이다.withdraw: 잔액이 금액보다 엄격히 작으면 결과는 insufficient funds이고, 그렇지 않으면 금액을 빼고 ok를 출력한다.transfer: 두 계좌 번호가 (은행 코드까지 포함하여) 같으면 결과는 same account이다. 그렇지 않고 보내는 계좌의 잔액이 금액보다 엄격히 작으면 결과는 insufficient funds이다. 그 외의 경우에는 돈을 옮기고, 두 계좌가 같은 은행이면 ok, 다른 은행이면 interbank를 출력한다.각 시나리오 뒤에는 end가 적힌 줄과 빈 줄 하나를 출력한다. 마지막 시나리오의 end 뒤에는 goodbye라는 단어가 적힌 줄을 하나 더 출력한다.