···11+import fileinput
22+33+44+INITIAL = None
55+RULES = {}
66+GENS = 200 # 200 generations is safe for the automata to converge
77+TARGET_GEN = 50000000000
88+99+for i, line in enumerate(fileinput.input()):
1010+ if i == 0:
1111+ INITIAL = line.split()[-1]
1212+ elif i >= 2:
1313+ a, _, b = line.split()
1414+ RULES[a] = b
1515+1616+1717+state = ['.'] * GENS + list(INITIAL) + ['.'] * GENS
1818+pot_sums = []
1919+2020+for it in range(GENS):
2121+ amt = sum(i - GENS for i, p in enumerate(state) if p == '#')
2222+ pot_sums.append(amt)
2323+2424+ next_state = ['.'] * len(state)
2525+ for i in range(len(state) - 2):
2626+ next_state[i + 2] = RULES.get(''.join(state[i:i+5]), '.')
2727+2828+ state = next_state
2929+3030+print "Sum of plants after 20 generations:", pot_sums[20]
3131+3232+growth_per_gen = pot_sums[-1] - pot_sums[-2]
3333+remaining_gens = TARGET_GEN - GENS + 1
3434+print "Sum after 50000000000 generations:", growth_per_gen * remaining_gens + pot_sums[-1]