import java.io.*; import java.util.*; import java.lang.*; import static java.lang.System.out; public class banking { public static class Acc { public int ucet; public int banka; public double balance; public Acc(int ucet, int banka, double balance) { this.ucet = ucet; this.banka = banka; this.balance = balance; } public boolean equals(Object accx) { if(this == accx) return true; Acc acc = (Acc)accx; if(ucet == acc.ucet && banka == acc.banka) return true; return false; } public String toString() { return "ucet=" + ucet + ", banka=" + banka + ", stav=" + balance; } } public static List acc; public static boolean priklad() throws Exception { int pocetUctu = readInt(); //nactu ucty if(pocetUctu == 0) return false; acc = new ArrayList(pocetUctu); for(int i = 0; i < pocetUctu; i++) { acc.add( new Acc(readInt(), readInt(), readDouble()) ); //out.println("ucet pridan:" + acc.get(i)); } //prikazy while(true) { String prikaz = readToken(); if(prikaz.equals("end")) { out.println("end\n"); break; } if(prikaz.equals("withdraw")) { withdraw(new Acc(readInt(), readInt(), 0.0), readDouble()); continue; } if(prikaz.equals("deposit")) { deposit(new Acc(readInt(), readInt(), 0.0), readDouble()); continue; } if(prikaz.equals("create")) { create(new Acc(readInt(), readInt(), 0.0)); continue; } if(prikaz.equals("transfer")) { transfer(new Acc(readInt(), readInt(), 0.0), new Acc(readInt(), readInt(), 0.0), readDouble() ); continue; } } return true; } public static void withdraw(Acc ucet, double kolik) { if(acc.contains(ucet)) { Acc tento = acc.get(acc.indexOf(ucet)); if(tento.balance >= kolik) { out.println("withdraw " + printDouble(kolik) + ": ok"); tento.balance -= kolik; } else { out.println("withdraw " + printDouble(kolik) + ": insufficient funds"); } } else { out.println("withdraw " + printDouble(kolik) + ": no such account"); } } public static void deposit(Acc ucet, double kolik) { if(acc.contains(ucet)) { Acc tento = acc.get(acc.indexOf(ucet)); out.println("deposit " + printDouble(kolik) + ": ok"); tento.balance += kolik; } else { out.println("deposit " + printDouble(kolik) + ": no such account"); } } public static void create(Acc ucet) { if(acc.contains(ucet)) { out.println("create: already exists"); } else { out.println("create: ok"); acc.add(ucet); } } public static void transfer(Acc z, Acc to, double kolik) { if((!acc.contains(z)) || (!acc.contains(to)) ) { out.println("transfer " + printDouble(kolik) + ": no such account"); return; } if(z.equals(to)) { out.println("transfer " + printDouble(kolik) + ": same account"); return; } Acc zOk = acc.get(acc.indexOf(z)); Acc toOk = acc.get(acc.indexOf(to)); if(zOk.balance < kolik) { out.println("transfer " + printDouble(kolik) + ": insufficient funds"); return; } zOk.balance -= kolik; toOk.balance += kolik; if(zOk.banka != toOk.banka) { out.println("transfer " + printDouble(kolik) + ": interbank"); return; } out.println("transfer " + printDouble(kolik) + ": ok"); } public static String printDouble(double x) { /////////////////////////////////// String res = Double.toString(x); if( res.charAt(res.length()-2)=='.' ) return res + "0"; else return res; } static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); static StringTokenizer pstk = new StringTokenizer(""); static String pline; public static void main(String[] args)throws Exception { /*String line; StringTokenizer stk; line = br.readLine(); //compareTo("end")!0 stk = new StringTokenizer(line); stk.nextToken(line); */ while(priklad()); out.println("goodbye"); } public static int readInt() throws Exception { return Integer.parseInt(readToken()); } public static double readDouble() throws Exception { return Double.parseDouble(readToken()); } public static String readToken() throws Exception { while (!pstk.hasMoreTokens()) pstk = new StringTokenizer(pline = br.readLine(), " /", false); return pstk.nextToken(); } }