from functools import reduce from math import gcd def lcm(a, b): return abs(a*b) // gcd(a, b) # f(n)=an+b and f(m)=xm+y # Intersection of 2 sequences -> ck+d def merge(a, b, x, y): while b != y: if b < y: b += a * ((y-b-1) // a + 1) else: y += x * ((b-y-1) // x + 1) return lcm(a, x), b lines = [x.strip() for x in open("input.txt")] # f(n) = [interval] * n + [offset] --> (interval, offset) busses = ((int(x), -idx) for idx, x in enumerate(lines[1].split(',')) if x != 'x') sequence = reduce(lambda fn, fm: merge(*fn, *fm), busses, (1, 0)) print(sequence[1])