···11+import fileinput
22+from collections import deque
33+44+55+def perform_dance(progs, moves):
66+ for m in moves:
77+ if m[0] == 's':
88+ progs.rotate(int(m[1:]))
99+1010+ else:
1111+ a, b = m[1:].split('/')
1212+1313+ if m[0] == 'x':
1414+ a = int(a)
1515+ b = int(b)
1616+ else:
1717+ # deque.index() only supported in Python 3.5+
1818+ progs_lst = list(progs)
1919+ a = progs_lst.index(a)
2020+ b = progs_lst.index(b)
2121+2222+ progs[a], progs[b] = progs[b], progs[a]
2323+2424+2525+MOVES = fileinput.input()[0].strip().split(',')
2626+PROGS = [chr(x) for x in range(ord('a'), ord('p') + 1)]
2727+2828+# Part 1
2929+progs = deque(PROGS)
3030+perform_dance(progs, MOVES)
3131+print "Order of programs after first dance:", ''.join(progs)
3232+3333+# Part 2
3434+progs = deque(PROGS)
3535+order = ''.join(progs)
3636+past_orders = []
3737+cycle_len = 0
3838+3939+while order not in past_orders:
4040+ past_orders.append(order)
4141+ perform_dance(progs, MOVES)
4242+ order = ''.join(progs)
4343+ cycle_len += 1
4444+4545+# Now we know the length of the cycle, so just compute the order
4646+# after the billionth dance using modular arithmetic.
4747+idx = 1000000000 % cycle_len
4848+print "Order of programs after one billion dances:", past_orders[idx]