국제 대학생 프로그래밍 대회

아직 제출이 없습니다시간 제한1초메모리 제한128 MB

문제

이런 대회를 한 번 여는 데 얼마나 많은 일이 필요한지 아는가? 강의실을 예약하고, 컴퓨터를 설치하고, 먹을 것을 사고, 상장을 인쇄하는 것도 그중 일부일 뿐이다. 1995년 첫 CTU 대회부터 지금까지 준비하는 사람들은 수많은 밤을 새웠고, 전부 여러분 같은 사람이 ICPC를 즐기라고 한 일이다.

그중에서도 문제 세트에 손이 가장 많이 간다. 지문만 쓴다고 끝나지 않고 정답 코드와 테스트 데이터까지 준비해야 한다. 그 일을 도와 달라. 온라인 뱅킹 문제에 쓸 테스트 입력이 필요하다. 뱅킹 프로그램이 하는 일은 다음과 같다.

뱅킹 프로그램은 여러 시나리오를 읽는다. 시나리오는 감독을 시작하는 시점에 존재하는 계좌 수 $A$가 적힌 줄로 시작하고, $0 < A \le 100$이다. 이어지는 $A$개의 줄에는 계좌 번호, 공백 하나, 그 계좌의 시작 잔액이 적혀 있다. 그 뒤의 모든 줄은 요청 하나이며, 한 시나리오의 요청은 $0$개 이상 $1000$개 이하이다.

명령인자
create새 계좌를 만든다새 계좌 번호
deposit계좌에 현금을 넣는다계좌 번호, 금액
withdraw계좌에서 현금을 뺀다계좌 번호, 금액
transfer두 계좌 사이로 송금한다출금 계좌, 입금 계좌, 금액

시나리오의 마지막 요청 다음에는 end가 적힌 줄과 빈 줄 하나가 오고, 그다음 시나리오가 시작한다. $A$ 자리에 0이 적힌 줄이 나오면 입력 전체가 끝난다.

계좌 번호는 십진수 네 자리, 빗금, 그 계좌를 관리하는 은행 코드 한 자리로 이루어진다. 은행마다 코드가 다르다. 금액은 소수점 아래 두 자리를 정확히 갖는 음이 아닌 십진수이고, 10000.00 이하이며, 필요 없는 0을 앞에 붙이지 않으므로 1.00보다 작은 금액만 0으로 시작한다. 시작 잔액도 표기법은 같지만 상한이 없다.

뱅킹 프로그램은 요청마다 한 줄을 출력한다. 명령, 명령에 금액 인자가 있으면 그 금액, 콜론, 공백 하나, 그리고 처리 결과 순서다.

create: 같은 은행에 같은 번호의 계좌가 이미 있으면 결과는 already exists이다. 없으면 잔액 0.00으로 계좌를 만들고 ok를 출력한다.

create가 아닌 명령은, 인자로 받은 계좌 번호 중 존재하지 않는 것이 하나라도 있으면 결과가 no such account이다. 계좌가 모두 존재하면 아래 규칙을 따른다.

deposit: 결과는 언제나 ok이고, 금액을 잔액에 더한다.

withdraw: 잔액이 금액보다 작으면 결과는 insufficient funds이다. 그렇지 않으면 금액을 빼고 ok를 출력한다.

transfer: 두 계좌 번호가 은행 코드까지 같으면 결과는 same account이다. 그렇지 않고 출금 계좌 잔액이 금액보다 작으면 결과는 insufficient funds이다. 둘 다 아니면 돈을 옮기고, 두 계좌가 같은 은행이면 ok를, 다른 은행이면 interbank를 출력한다.

시나리오 하나가 끝날 때마다 end와 빈 줄 하나를 출력하고, 마지막 시나리오의 end 뒤에는 goodbye가 적힌 줄을 하나 더 출력한다.

주어진 출력을 뱅킹 프로그램이 그대로 찍게 만드는 입력을 만들면 된다. 같은 출력을 내는 입력은 아주 많으므로, 출력 항목에서 정해 둔 한 가지 형태로 적는다.

입력

입력은 뱅킹 프로그램을 한 번 올바르게 실행한 출력 전체이므로, 그 출력을 내는 입력이 적어도 하나 존재한다. 시나리오 하나에 들어 있는 결과 줄은 $0$개 이상 $1000$개 이하이다.

출력

주어진 출력을 그대로 만들어 내는 뱅킹 프로그램 입력을 아래 형태에 맞추어 출력한다.

시나리오의 결과 줄을 하나씩 요청 하나로 바꾼다. 아래 표에서 $v$는 결과 줄에 찍힌 금액을 글자 그대로 옮긴 것이고, $k$는 지금 시나리오에서 ok로 처리된 create 요청의 개수이며 이번 줄도 센다.

결과 줄요청
create: already existscreate 1000/1
create: okcreate KKKK/3, KKKK는 $k$를 네 자리로 적은 것
deposit v: okdeposit 1000/1 v
deposit v: no such accountdeposit 9999/9 v
withdraw v: okwithdraw 1000/1 v
withdraw v: insufficient fundswithdraw 4000/1 v
withdraw v: no such accountwithdraw 9999/9 v
transfer v: oktransfer 1000/1 2000/1 v
transfer v: interbanktransfer 1000/1 3000/2 v
transfer v: same accounttransfer 1000/1 1000/1 v
transfer v: insufficient fundstransfer 4000/1 1000/1 v
transfer v: no such accounttransfer 9999/9 1000/1 v

시나리오마다 계좌를 정확히 네 개 선언하고, 요청보다 먼저 다음 순서로 적는다.

계좌 줄역할
1000/1 B돈이 들어 있는 유일한 계좌
2000/1 0.00같은 은행 안에서 이루어지는 송금의 입금 계좌
3000/2 0.00다른 은행으로 가는 송금의 입금 계좌
4000/1 0.00잔액이 늘 모자라는 계좌

$B$는 위 요청들이 요구된 결과를 그대로 내는 잔액 중 가장 작은 값이다. 소수점 아래 두 자리를 정확히 붙이고, 필요 없는 0은 앞에 붙이지 않는다.

한 시나리오의 요청을 다 적으면 end와 빈 줄 하나를 출력하고, 마지막 시나리오 뒤에는 0이 적힌 줄을 출력한다.