static class Solver { int t, n; Map functions; Set vars, found; InputReader in; OutputWriter out; void solve() { t = in.nextInt(); for (int test = 1; test <= t; test++) { n = in.nextInt(); functions = new HashMap<>(2 * n); vars = new HashSet<>(); found = new HashSet<>(); for (int i = 0; i < n; i++) { String[] tokens = in.nextLine().split("="); String[] params = tokens[1].substring(tokens[1].indexOf("(") + 1, tokens[1].indexOf(")")).split (","); if (params.length == 1 && params[0].length() == 0) found.add(tokens[0]); else { vars.add(tokens[0]); functions.put(tokens[0], params); } } boolean ans = true; while (vars.size() > 0) { boolean check = false; Iterator iterator = vars.iterator(); List remove = new ArrayList<>(); while (iterator.hasNext()) { String curr = iterator.next(); if (exist(functions.get(curr))) { remove.add(curr); functions.remove(curr); found.add(curr); check = true; } } for (int i = 0; i < remove.size(); i++) vars.remove(remove.get(i)); if (!check) { ans = false; break; } } if (ans) out.println("Case #" + test + ": " + "GOOD"); else out.println("Case #" + test + ": " + "BAD"); } } boolean exist(String[] vars) { int len = vars.length; for (int i = 0; i < len; i++) if (!found.contains(vars[i])) return false; return true; } public Solver(InputReader in, OutputWriter out) { this.in = in; this.out = out; } }