def gcd_ext(m: int, n: int) -> (int, int, int): '''拡張ユークリッドの互除法 mx + ny = gcd(x, y) となる、gcd(x, y), x, y を返す。 ''' x, y, u, v = 1, 0, 0, 1 while n: k, m = divmod(m, n) m, n = n, m x, y, u, v = u, v, x - u * k, y - v * k return m, x, y def read_data(): x1, y1 = map(int, input().split()) x2, y2 = map(int, input().split()) x3, y3 = map(int, input().split()) return x1, y1, x2, y2, x3, y3 def solve2(x1, y1, x2, y2): ''' z = x1 + m*y1 ...(1) z = x2 + n*y2 ...(2) を満たす、非負の整数で最小の z および y1, y2 の lcm を返す。 そのような z が存在しないときは、z = -1 を返す。 gcd = a * y1 + b * y2 ...(3) とする。 lcm = y1 * y2 // gcd である。 y1 = t1 * gcd ...(4) y2 = t2 * gcd ...(5) とする。 (1), (2), (4), (5) より、 x1 + m * t1 * gcd = x2 + n * t2 * gcd x1 - x2 = (-m * t1 + n * t2) * gcd x1 - x2 = x12 とすると、 x12 は、gcd の倍数のはずである。 k = x12 // gcd とすると k = -m * t1 + n * t2 ...(6) (3) に (4), (5) を代入して、両辺を gcd で割ると、 1 = a * t1 + b * t2 ...(7) 両辺を k 倍すると、 k = k * a * t1 + k * b * t2 = k * a * t1 + kb * t2 + p * t1 * t2 - p * t1 * t2 = (k * a + p * t2) * t1 + (k * b - p * t1) * t2 ... (8) ただし、 p は、任意の整数 (6), (8) より、 -m = k * a + p * t2 ...(9) n = k * b - p * t1 ...(10) となる整数 p が存在するはず。 (9), (10) を、(1), (2) に代入すると、 z = x1 - (k * a + p * t2) * y1 = x1 - k * a * y1 + t2 * y1 * p = x1 - k * a * y1 + lcm * p z = x2 + (k * b - p * t1) * y2 = x2 + k ( b * y2 - lcm * p よって、 z = (x1 - k * a * y1) % lcm あるいは、 z = (x2 - k * b * y2) % lcm とすれば良い。 ''' gcd, a, b = gcd_ext(y1, y2) lcm = y1 * y2 // gcd k, r = divmod(x1 - x2, gcd) if r != 0: return -1, lcm z = (x1 - k * a * y1) % lcm return z, lcm def solve3(x1, y1, x2, y2, x3, y3): x12, y12 = solve2(x1, y1, x2, y2) if x12 == -1: return -1 # z % y12 = x12 and z % y3 = x3 z, lcm = solve2(x12, y12, x3, y3) if z == 0: return lcm return z x1, y1, x2, y2, x3, y3 = read_data() print(solve3(x1, y1, x2, y2, x3, y3))