void doRotate(List list, String arg) { def amount = Integer.valueOf(arg.substring(1)) Collections.rotate(list, amount) } void exchangePos(List list, String arg) { def parts = arg.substring(1).split("/") list.swap(Integer.valueOf(parts[0]), Integer.valueOf(parts[1])) } void exchangeProg(List list, String arg) { def p1 = list.indexOf(arg.substring(1, 2)); def p2 = list.indexOf(arg.substring(3, 4)); list.swap(p1, p2); } def input = System.in.newReader().readLine() def moves = input.split(",") def state = new LinkedList(Arrays.asList("abcdefghijklmnop".split(""))) String dance(List state, String[] moves) { for (move in moves) { switch (move.charAt(0)) { case 's': doRotate(state, move) break; case 'x': exchangePos(state, move) break; case 'p': exchangeProg(state, move) break; default: println("Unknown type!") } } return state.join("") } String danceOften(String[] moves, Integer amount) { def state = new LinkedList(Arrays.asList("abcdefghijklmnop".split(""))) def seen = new HashSet() def order = new ArrayList() def summary = state.join(""); for (i in 0..