#!/usr/bin/python

def gcd(a, b):
    if a == 0: return (0, 1, b)
    f = gcd(b % a, a)
    return (f[1] - b / a * f[0], f[0], f[2])

def inver(a, m):
    return (m + gcd(a, m)[0]) % m

def calc(M, x):
    return (M / x[0]) * (inver(M / x[0], x[0]) * x[1] % x[0])

def cinska_zvyskova(div, mod):
    M = reduce(lambda x, y: x * y, div)
    return reduce(lambda x, y: x + y, [calc(M, x) for x in zip(div, mod)]) % M

p = [599561157376811721953, 943753934567180439929, 1157710228741282062487]
q = [[1, x - 1] for x in p]
for i in q[0]:
    for j in q[1]:
        for k in q[2]:
            print cinska_zvyskova(p, [i, j, k])
