Harryxun/stf_run huggingface dataset:
answer = []
comb = []
for j in range(N+1):
    for i in range(N+1):
        sum = 10000*j + 5000*i + 1000*(N-i-j)
        if(sum==Y and N-i-j>=0):
            comb = [j,i,N-i-j]
            answer = [str(x) for x in comb]
            answer = ' '.join(answer)
            print(answer)
            exit()
if not(answer):
    print('-1 -1 -1')

### FIXED CODE ###

date = input()

date_list = list(date)
date_list[3] = '8'
output = ''.join(date_list)

print(output)
A = input()
B = input()
C = input()
turn = A[0]

while True:
    if turn == 'a':
        if len(A) == 0:
            print('A')
            break
        turn = A[0]
        A = A[:-1]
    if turn == 'b':
        if len(sb) == 0:
            print('B')
            break
        turn = B[0]
        B = B[:-1]
    if turn == 'c':
        if len(sc) == 0:
            print('C')
            break
        turn = C[0]
        C = C[:-1]

### FIXED CODE ###

a = input()
b = input()
c = input()
sa = [a[i] for i in range(len(a))]
sb = [b[i] for i in range(len(b))]
sc = [c[i] for i in range(len(c))]
next = a[0]
while True:
    if next == 'a':
        if len(sa) == 0:
            print("A")
            exit(0)
        next = sa[0]
        sa.pop(0)
    if next == 'b':
        if len(sb) == 0:
            print("B")
            exit(0)
        next = sb[0]
        sb.pop(0)
    if next == 'c':
        if len(sc) == 0:
            print("C")
            exit(0)
        next = sc[0]
        sc.pop(0)
import numpy as np

n, ww = map(int, input().split())

s = np.zeros(ww+1, dtype=np.int64)
for i in range(n):
    w, v = map(int, input().split())
    s[w:] = np.maximum(s[w:], s[:-w] + v)

print(s[ww])

### FIXED CODE ###

import numpy as np

n, ww = map(int, input().split())

s = np.full(1000*100+1, 10**11, dtype=np.int64)
s[0] = 0
for i in range(n):
    w, v = map(int, input().split())
    s[v:] = np.minimum(s[v:], s[:-v] + w)

print(np.max(np.where(s<=ww)))
# -*- coding: utf-8 -*-
import math
a,b = (int(i) for i in input().split())
print(a * b // math.gcd(a, b))


### FIXED CODE ###

# -*- coding: utf-8 -*-
import fractions
a,b = (int(i) for i in input().split())
print(a * b // fractions.gcd(a, b))
s=input()
t=input()
i=0
x=0
while i<=2:
  i+=1
  if S[i]==T[i]:
    x+=1
        
print(x)    
    


### FIXED CODE ###

s=input()
t=input()
c=0
for i in range(3):
    if s[i]==t[i]:
        c+=1

print(c)
a = int(input())
b = int(input())

n = a*b

if n%2 == 0:
  print('Even')
else :
    print('Odd')

### FIXED CODE ###

a, b = map(int, input().split())
n = a*b

if n%2 == 0:
  print('Even')
else:
    print('Odd')
a = input()
b = input()
cnt = 0
for i in range(len(a)):
	if a[i] != b[i]:
    	cnt+=1
print(cnt)

### FIXED CODE ###

a = input()
b = input()
cnt = 0
for i in range(len(a)):
    if a[i] != b[i]:
        cnt += 1
print(cnt)
from scipy.special import factorial

def factorization(n):
    def factor_sub(n, m):
        c = 0
        while n % m == 0:
            c += 1
            n /= m
        return c, n
    #
    buff = []
    c, m = factor_sub(n, 2)
    if c > 0: buff.append((2, c))
    c, m = factor_sub(m, 3)
    if c > 0: buff.append((3, c))
    x = 5
    while m >= x * x:
        c, m = factor_sub(m, x)
        if c > 0: buff.append((x, c))
        if x % 6 == 5:
            x += 2
        else:
            x += 4
    if m > 1: buff.append((m, 1))
    return buff


def divisor_num(n):
    a = 1
    for _, x in factorization(n):
        a *= x + 1
    return a

N = int(raw_input())

s = factorial(N)

print divisor_num(s)

### FIXED CODE ###

import math

def factorization(n):
    def factor_sub(n, m):
        c = 0
        while n % m == 0:
            c += 1
            n /= m
        return c, n
    #
    buff = []
    c, m = factor_sub(n, 2)
    if c > 0: buff.append((2, c))
    c, m = factor_sub(m, 3)
    if c > 0: buff.append((3, c))
    x = 5
    while m >= x * x:
        c, m = factor_sub(m, x)
        if c > 0: buff.append((x, c))
        if x % 6 == 5:
            x += 2
        else:
            x += 4
    if m > 1: buff.append((m, 1))
    return buff


def divisor_num(n):
    a = 1
    for _, x in factorization(n):
        a *= x + 1
    return a

N = int(raw_input())

s = math.factorial(N)
x = divisor_num(s)
z = 1000000007

if x > z:
    ans = x%z
else:
    ans = x


print ans
N = int(input())
if N==1:
    print("Hello World")
else:
    A, B = [int(x) for x in input().split()]
    print(A+B)

### FIXED CODE ###

N = int(input())
if N==1:
    print("Hello World")
else:
    A = int(input())
    B = int(input())
    print(A+B)
s, c = [int(e) for e in input().split()]


def main(s, c):
    ret = 0
    for i in range(s):
        ret += 1
        c   -= 2
    ret += c // 4
    return ret


ans = main(n)
print(ans)


### FIXED CODE ###

s, c = [int(e) for e in input().split()]


def main(s, c):
    if s >= c // 2:
        return c // 2
    else:
        ret = s
        c -= s * 2
        ret += c // 4
        return ret


ans = main(s, c)
print(ans)
T = list((input()))

for i in range(len(T)):
    if T[i] == '?':
        if T[i - 1] == 'P':
            T[i] = 'D'
        elif T[i + 1] == '?':
            T[i] = 'P'
            T[i + 1] = 'D'
            i += 1
        else:
            T[i] = 'D'
        

TL=''.join(T)
print(TL)

### FIXED CODE ###

T = list(str(input()))

for i in range(len(T)):
    if T[i] == '?':
        T[i] = 'D'
    print(T[i],end='')
##mod,nについての制約は自分でいかに記入する

def find_power(n,mod):
    # 0!からn!までのびっくりを出してくれる関数(ただし、modで割った値に対してである）
    powlist=[0]*(n+1)
    powlist[0]=1
    powlist[1]=1
    for i in range(2,n+1):
        powlist[i]=powlist[i-1]*i%(mod)
    return powlist
 #あるかずxのn乗をmodで割ったあまりを返す関数pow_cal(x,n,mod)
def pow_cal(x,n,mod):
    if n==0:
         return 1
    elif n==1:
         return x%mod
    elif n>=2:
        if n%2==0:
             return (pow_cal(x,n//2,mod)**2)%mod
        else:
             return (x*pow_cal(x,n//2,mod)**2)%mod

def find_inv_power(n,mod):
    #0!からn!までの逆元を素数modで割ったあまりリストを作る関数
    c=1
    uselist=[0 for i in range(n+1)]
    for i in range(1,n+1):
        c*=i
        c%=mod
    first=pow_cal(c,mod-2,mod)
    uselist[n]=first
    for i in range(n,0,-1):
        uselist[i-1]=(uselist[i]*i)%(mod)
    return uselist
    
A=find_power(4*10**5,mod)
B=find_inv_power(4*10**5,mod)

def combi(n,r,mod):
    if n<r:
        return 0
    elif n>=r:
        return (A[n]*B[r]*B[n-r])%(mod)

    
M,N,K=map(int,input().split())
ans=M*N*(M+N)*(M*N-1)//6
mod=10**9+7
print(ans*combi(M*N-2,K-2,mod)%mod)

### FIXED CODE ###

##mod,nについての制約は自分でいかに記入する
mod=10**9+7
def find_power(n,mod):
    # 0!からn!までのびっくりを出してくれる関数(ただし、modで割った値に対してである）
    powlist=[0]*(n+1)
    powlist[0]=1
    powlist[1]=1
    for i in range(2,n+1):
        powlist[i]=powlist[i-1]*i%(mod)
    return powlist
 #あるかずxのn乗をmodで割ったあまりを返す関数pow_cal(x,n,mod)
def pow_cal(x,n,mod):
    if n==0:
         return 1
    elif n==1:
         return x%mod
    elif n>=2:
        if n%2==0:
             return (pow_cal(x,n//2,mod)**2)%mod
        else:
             return (x*pow_cal(x,n//2,mod)**2)%mod

def find_inv_power(n,mod):
    #0!からn!までの逆元を素数modで割ったあまりリストを作る関数
    c=1
    uselist=[0 for i in range(n+1)]
    for i in range(1,n+1):
        c*=i
        c%=mod
    first=pow_cal(c,mod-2,mod)
    uselist[n]=first
    for i in range(n,0,-1):
        uselist[i-1]=(uselist[i]*i)%(mod)
    return uselist
    
A=find_power(4*10**5,mod)
B=find_inv_power(4*10**5,mod)

def combi(n,r,mod):
    if n<r:
        return 0
    elif n>=r:
        return (A[n]*B[r]*B[n-r])%(mod)

    
M,N,K=map(int,input().split())
ans=M*N*(M+N)*(M*N-1)//6

print(ans*combi(M*N-2,K-2,mod)%mod)
n = int(input())
a_ = [[int(i) for i in input()] for j in range(n)]
a = set([_ for _ in a_])
print(len(a))

### FIXED CODE ###

#8th
n = int(input())
a = set(float(input()) for i in range(n))
# a_ = [[int(i) for i in input()] for j in range(n)]
# a = set(_[0] for _ in a_)
print(len(a))
# -*- coding: utf-8 -*-
l = [0] 
r = [0]
all_gate_clear = 1


#numcard
#gatenum
N, M = map(int, input().split())
card_count = range(N+1)

#idカードの生成
for i in range(M):
    l_temp,r_temp = map(int, input().split())
l.append(l_temp)
r.append(r_temp)
    
for gate_num in range(1,M+1):
    #1ゲートの処理
    for card in range(1,N+1):
        num = 0
        while r[gate_num] >= l[gate_num] + num:
            if l[gate_num] + num == card:
                if card_count[card] == gate_num -1:
                    card_count[card] += 1
                    break
            num += 1

for card in range(1,N+1):
    if card_count[card] == M:
        all_gate_clear += 1

print(all_gate_clear)

### FIXED CODE ###

# -*- coding: utf-8 -*-
l = [] 
r = []
count = 0

N, M = map(int, input().split())
l = [0] * M
r = [0] * M
for i in range(0,M):
    l[i], r[i] = map(int, input().split())

#idカードの生成
    
ml = max(l)
mr = min(r)

for i in range(1,N+1):
    if  ml <= i and i <= mr:
        count += 1

print(count)
x = int(input())

500yen = x//500*1000
5yen = x%500//5*5

print(500yen + 5yen)


### FIXED CODE ###

s = input()

if(s[2] == s[3] and s[4] == s[5]):
  print("Yes")
 
else:
  print("No")
n=int(input())

l=[]
a=[]
b=[]
d={}
s=[]

for i in range(1,n+1):
    t=list(input().split())
    l.append([t[0],int(t[1])])
    if t[0] not in a:
        a.append(t[0])
    b.append(t[0])
c=l.copy()
for e in a:
    d[e]=b.count(e)
c.sort()
i=0
while i<n:
    if d[c[i][0]]==1:
        s.append(l.index(b[i]))
        i+=1
    else:
        for j in range(d[c[i][0]]):
            s.append(l.index(c[i+d[c[i][0]]-1-j])+1)
        i+=d[c[i][0]]

for i in range(n):
    print(s[i])

### FIXED CODE ###

n=int(input())

l=[]
a=[]
b=[]
d={}
s=[]

for i in range(1,n+1):
    t=list(input().split())
    l.append([t[0],int(t[1])])
    if t[0] not in a:
        a.append(t[0])
    b.append(t[0])
c=l.copy()
for e in a:
    d[e]=b.count(e)
c.sort()
i=0
while i<n:
    if d[c[i][0]]==1:
        s.append(l.index(c[i])+1)
        i+=1
    else:
        for j in range(d[c[i][0]]):
            s.append(l.index(c[i+d[c[i][0]]-1-j])+1)
        i+=d[c[i][0]]

for i in range(n):
    print(s[i])
n, k = map(int,input().split())
a = list(map(int,input().split()))

route = []
i = 0

while True:
    ne = a[i]

    if i not in route:
        route.append(i)
    else:
        k = k - (len(route) - len(route[i:]))
        print(a[k%len(route[i:])])
        break

    i = ne - 1

### FIXED CODE ###

from collections import defaultdict

n, k = map(int,input().split())
a = list(map(int,input().split()))

route = defaultdict(int)
i = 0
loop = []
tail = []

while route[i] < 2:

    if route[i] == 0:
        tail.append(i)
    else:
        loop.append(i)
    
    route[i] += 1
    i = a[i] - 1

if len(tail) > k:
    print(tail[k] + 1)
else:
    temp = len(tail) - len(loop)
    print(loop[(k-temp) % len(loop)] + 1)
import collections as c
ip = lambda : map(int, input().split())
# ##############
N = int(input())
l = list(ip())
d = []
for i in range(N-1):
    d.append(l[i+1]-l[i])

ans = 0;mod = 1e9+7;c=0;l=1
for i in range(N-1):
    c = (i+1)*c + l
    ans = ((i+1)*ans + c*d[i])%mod
    l = l*(i+1)%mod
print(int(ans%mod))

### FIXED CODE ###

import collections as c
ip = lambda : map(int, input().split())
# ##############
N = int(input())
l = list(ip())
d = []
for i in range(N-1):
    d.append(l[i+1]-l[i])

ans = 0
mod = int(1e9+7)
c=0
l=1
for i in range(N-1):
    c = ((i+1)*c + l)%mod
    ans = ((i+1)*ans + c*d[i])%mod
    l = l*(i+1)%mod
print(ans)
A = [map(int, input().split())]
print("win" if sum(A) < 22 else "bust")

### FIXED CODE ###

A = list(map(int, input().split()))
print("win" if sum(A) < 22 else "bust")
a,b map(input().spilit())

if a + b[-1] == b :

   print("Yes")

else:
   print("No")

### FIXED CODE ###

s = input()
t = input()

if (s + t[-1]) == t :
    print("Yes")

else :
    print("No")
import collections
n = int(input())
v = list(map(int,input().split()))
ans = 0
lia = v[::2]
lib = v[1::2]
tmp1 = len(lia)
tmp2 = len(lib)
lia.sort()
lib.sort()
if lia[0]==lib[-1]:
  print(n//2)
  exit()
lib.sort(reverse=True)
lia = collections.Counter(lia)
lib = collections.Counter(lib)
ans += tmp1-lia.most_common()[0][1]
ans += tmp2-lib.most_common()[0][1]
if lia.most_common()[0][1]%2==1 and lib.most_common()[0][1]2==1:
  print(ans+1)
else:
  print(ans)

### FIXED CODE ###

from collections import Counter
N = int(input())
V = list(map(int, input().split()))
a = Counter(V[0::2]).most_common() + [(0,0)]
b = Counter(V[1::2]).most_common() + [(0,0)]
if a[0][0]!=b[0][0]:
    print(N-a[0][1]-b[0][1])
else:
    print(N-max(a[1][1]+b[0][1],a[0][1]+b[1][1]))
N = int(input())
XY = [list(map(int,input().split())) for _ in range(N)]

cost = N
from operator import itemgetter
XY.sort(key = itemgetter(0))
dic = {}

for i in range(N-1):
    xx,yy = XY[i]
    x,y = XY[i+1]
    temp = (x-xx,y-yy)
    if temp in dic:
        dic[temp] += 1
    else:
        dic[temp] = 1

print(cost - max(dic.values()))


### FIXED CODE ###

N = int(input())
XY = {}
for i in range(N):
    x,y = map(int,input().split())
    XY[(x,y)] = 1
dis = {}

ans = N

for x,y in XY.keys():
    for xx,yy in XY.keys():
        if x != xx or y != yy:
            temp = (xx-x,yy-y)
            if not(temp in dis):
                dis[temp] = 1

for p,q in dis:
    test = 0
    copy = XY.copy()
    for x,y in copy:
            if (x+p,y+q) in copy.keys():
                test += 1
    if N - test < ans:
        ans = N - test
print(ans)
H,M = map(int,input().split())
if M%2 == 0 :
    print(int(H*M/2))
else :
    prnt(int(H*M/2) + round(H/2))

### FIXED CODE ###

import math
H,M = map(int,input().split())
if H == 1 or M ==1 :
    print(1)
else :
    print(math.ceil((H*M)/2))
n=input()
x=int(n)
b=0
for i in n:
  b+=int(i)

if x%b==0:
  print("Yes")
else:
  print("No")

### FIXED CODE ###

s=list(input())
p=0
for i in  range(4):
  if s[i]=="+":
    p=p+1
  else:
    p=p-1
print(p)
N,K = map(int,input().split())
l = list(map(int,input().split()))
ans = 0
sorted(l)
for i in range(K):
  ans += l[n-i-1]
print(ans)

### FIXED CODE ###

A,B = map(int,input().split())
if A%3 == 0:
  print("Possible")
elif B%3 == 0:
  print("Possible")
elif (A+B)%3 == 0:
  print("Possible")
else:
  print("Impossible")
n = int(input())

sum = int(n[0]) + (len(n)-1) * 9
print(sum if set(n[1:]) == {"9"} else sum - 1)


### FIXED CODE ###

n = input()

sum = int(n[0]) + (len(n)-1) * 9

if len(n) == 1:
    print(n)
else:
    print(sum if set(n[1:]) == {"9"} else sum - 1)
a,b = input().split()
if(a>(b*2)):
  print(a-(b*2))
else:
  print(0)


### FIXED CODE ###

a,b = input().split()
a,b = int(a),int(b)
print(max(a-2*b,0))
N, K = map(int, input().split())
ans = 0
switches = list(map(int, input().split()))
switches.append(10**9+10)
for idx in range(N):
  ans += min(K, switches[i+1] - switches[i])
print(ans)
  


### FIXED CODE ###

N, K = map(int, input().split())
ans = 0
switches = list(map(int, input().split()))
switches.append(2*10**9)
for idx in range(N):
  ans += min(K, switches[idx+1] - switches[idx])
print(ans)
import bisect

x ,n=map(int,input().split())
p=list(map(int,input().split()))

p.sort()

index = bisect.bisect_left(p,x)

if n==0:
    print(x)
else:
    for i in range(n):
        print(index-i, index+i)
        if p[index-i] != x-i:
            print(x-i)
            break
        elif p[index+i] != x+i:
            print(x+i)
            break

### FIXED CODE ###

import bisect

x ,n=map(int,input().split())
p=list(map(int,input().split()))

p.sort()

index = bisect.bisect_left(p,x)

if n==0:
    print(x)
else:
    p= p+[p[n-1]+2]
    for i in range(n):
        # print(index-i, index+i)
        if p[max(index-i,0)] != x-i:
            print(x-i)
            break
        elif p[min(index+i,n)] != x+i:
            print(x+i)
            break
    else:
        print(p[0]-1)
N = int(input())
H = list(map(int, input().split()))
 
ans = 1
for i in range(1, N-1, 1):
    #print((H[i] - H[i+1]))
    if ((H[i-1] - H[i]) >= 1) & ((H[i] - H[i+1]) >= 1):
        print('No')
        ans = -1
        break
    elif ((H[i-1] - H[i]) == 0) & ((H[i] - H[i+1]) == 1):
        print('No')
        ans = -1
        break
    elif ((H[i-1] - H[i]) >= 2) or ((H[i] - H[i+1]) >= 2):
        print('No')
        ans = -1
        break
    else:
        continue

if (N == 2) & (H[0] - H[1] >= 2):
    print('No')
    ans = -1
 
if (ans == 1): print('Yes')

### FIXED CODE ###

N = int(input())
H = list(map(int, input().split()))

ans = 1
for i in reversed(range(1, N, 1)):
    if (H[i-1] - H[i]) == 1:
        H[i-1] -= 1
    if (H[i-1] - H[i]) > 1:
        print('No')
        ans = -1
        break
if ans == 1: print('Yes')
def segfunc(x, y): return max(x, y)

def update(i, x):
    i += MAX_N - 1
    node[i] = x
    while i:
        i = (i-1)//2
        node[i] = segfunc(node[i*2+1], node[i*2+2])

def query(l, r):
    L = l + MAX_N
    R = r + MAX_N
    s = INF
    while L < R:
        if R & 1:
            R -= 1
            s = segfunc(s, node[R - 1])
        if L & 1:
            s = segfunc(s, node[L - 1])
            L += 1
        L >>= 1
        R >>= 1
    return s

N, K = map(int, input().split())
MAX_N = 2**(N-1).bit_length()
a = [int(input()) for _ in range(N)]
node = [0] * (2 * 30005)
INF = 0
ma = max(a)
ans = 0
for i in a:
    tmp = query(max(i - K, 0), min(ma, i + K) + 1)
    update(i, tmp + 1)
    ans = max(ans, tmp + 1)
print(ans)


### FIXED CODE ###

def segfunc(x, y): return max(x, y)

class SegmentTree:
    def __init__(self, arr):
        size = len(arr)
        n = 2 ** (size - 1).bit_length()
        self.n = n
        self.node = [0] * (2*n)
        for i in range(size):
            self.node[i+n-1] = arr[i]
        for i in reversed(range(n-2)):
            self.node[i] = segfunc(self.node[2*i+1], self.node[2*i+2])

    def update(self, i, x):
        i += self.n - 1
        self.node[i] = x
        while i > 0:
            i = (i - 1) // 2
            self.node[i] = segfunc(self.node[i * 2 + 1], self.node[i * 2 + 2])

    def update(self, x, val):
        x += (self.n - 1)
        self.node[x] = val
        while x > 0:
            x = (x - 1) // 2
            self.node[x] = segfunc(self.node[2 * x + 1], self.node[2 * x + 2])

    def query(self, a, b):
        res = 0
        l = self.n - 1 + a
        r = self.n - 1 + (b - 1)

        while l <= r:
            if l == r:
                res = segfunc(res, self.node[l])
                break

            if l % 2 == 0:
                res = segfunc(res, self.node[l])
            if r % 2 == 1:
                res = segfunc(res, self.node[r])
            l = l // 2
            r = r // 2 - 1

        return res

N, K = map(int, input().split())
INF = 0
seg = SegmentTree([0] * 300005)
for i in range(N):
    a = int(input())
    tmp = seg.query(max(a - K, 0), min(a + K, 300000) + 1) + 1
    seg.update(a, tmp)
print(seg.query(0, 300005))
#!/usr/bin/env python3
import sys

def main():
    N, M = map(int, input().split())
    
    if M % 2 == 1:
        for i in range(M//2):
            print(i+1,M-i)
        for j in range(N//2 + 1):
            print(M+1+i,2*M+1-i)
    else:
        for i in range(M//2):
            print(i+1, M+1-i)
        for j in range(M//2):
            print(M+2+j,2*M+1-j)

if __name__ == '__main__':
    main()

### FIXED CODE ###

#!/usr/bin/env python3
import sys

def main():
    N, M = map(int, input().split())
    
    if M % 2 == 1:
        for i in range(M//2):
            print(i+1,M-i)
        for j in range(M//2 + 1):
            print(M+1+j,2*M+1-j)
    else:
        for i in range(M//2):
            print(i+1, M+1-i)
        for j in range(M//2):
            print(M+2+j,2*M+1-j)

if __name__ == '__main__':
    main()
mod = 10**9+7
def modinv(a, mod=10**9+7):
    return pow(a, mod-2, mod)

def combi(n,r,mod=10**9+7):
    fac = [0]*(n+1)
    fac[0] = 1
    fac[1] = 1
    for i in range(2,n+1):
        fac[i] = fac[i-1] * i % mod
    return( ( fac[n] * modinv(fac[r]) )%mod * modinv(fac[n-r]) % mod)

N,K = map(int,input().split())
for i in range(1,K+1):
    print(combi(N-K+1,i) * combi(K-1,i-1) % mod)


### FIXED CODE ###

mod = 10**9+7
def modinv(a, mod=10**9+7):
    return pow(a, mod-2, mod)

N,K = map(int,input().split())

fac = [0]*(N+1)
fac[0] = 1
fac[1] = 1
for i in range(2,N+1):
    fac[i] = fac[i-1] * i % mod

def combi(n,r,mod=10**9+7):
    return( ( fac[n] * modinv(fac[r]) )%mod * modinv(fac[n-r]) % mod)

for j in range(1,K+1):
    if N - K + 1 < j:
        print(0)
    else:
        print(combi(N-K+1,j) * combi(K-1,j-1) % mod)
import math
from fractions import gcd
N,X = map(int,input().split())
l = list(map(lambda x: abs(int(x)-X),input().split()))
print(reduce(fractions.gcd,l))

### FIXED CODE ###

import fractions
from functools import reduce
N,X = map(int,input().split())
l = list(map(lambda x: abs(int(x)-X),input().split()))
print(reduce(fractions.gcd,l))
al = [list(map(int, input().split())) for i in range(3)]
al = sum(a, [])
n = int(input())
bl = [int(input()) for i in range(n)]
check = [0 for i in range(9)]

for b in bl:
    if b in al:
        check[al.index(b)] = 1

if [1,1,1] in [check[:3], check[3:6], check[6:], check[0:7:3], check[1:8:3], check[2:9:3], check[0:9:4], check[3:8:2]]:
    print("Yes")
else:
    print("No")

### FIXED CODE ###

al = [list(map(int, input().split())) for i in range(3)]
al = sum(al, [])
n = int(input())
bl = [int(input()) for i in range(n)]
check = [0 for i in range(9)]

for b in bl:
    if b in al:
        check[al.index(b)] = 1

if [1,1,1] in [check[:3], check[3:6], check[6:], check[0:7:3], check[1:8:3], check[2:9:3], check[0:9:4], check[2:8:2]]:
    print("Yes")
else:
    print("No")
n,m,x = map(int,input().split())

ca=[list(map(int,input().split())) for _ in range(n)]

res=float('inf')

for i in range(2**n):
  sc=0
  a=[0]*m
  for j in range(n):
    if ((i >> j) & 1) :
      sc=+ca[j][0]
      a+=ca[j][1:]
  if min(a)>=x:
    res=min (sc,res)

if res == INF:
    print(-1)
else:
    print(res)


### FIXED CODE ###

lS=list(input())
T=input()

lT=list(T)
if lS==lT[0:len(lT)-1]:
  print('Yes')

else:
  print('No')
N = int(input())
h = list(map(int, input().split()))


# 貪欲に極大区間に対して水やりする
def f(y):
    L = next(
        (
            i
            for i, x in enumerate(y)
            if x > 0
        ),
        N
    )
    R = next(
        (
            i
            for i, x in enumerate(y[L:], L)
            if x == 0
        ),
        N
    )
    return (
        0 if L == N else
        1 + f(
            [x for x in y[:L]] +
            [x - 1 for x in y[L:R]] +
            [x for x in y[R:]]
        )
    )


ans = f(h)

print(ans)


### FIXED CODE ###

N = int(input())
h = list(map(int, input().split()))
ans = 0
while max(h) > 0:
    k = 0
    flag = False
    for i in range(N):
        if h[i] > 0:
            h[i] -= 1
            flag = True
        elif flag:
            k += 1
            flag = False
    if flag:
        k += 1
    ans += k

print(ans)
n, k = map(int,input().split())
a = list(map(int,input().split()))
a.sort(reverse=True)
print(a[0]+a[1]+a[2])

### FIXED CODE ###

n, k = map(int,input().split())
a = list(map(int,input().split()))
a.sort(reverse=True)

ans = 0
for i in range(k):
    ans += a[i]
print(ans)
list = list(map(str,inout().split()))
for x in list:
    if x=='A':
        x = 10
    elif x=='B':
        x = 11
    elif x=='C':
        x = 12
    elif x=='D':
        x = 13
    elif x=='E':
        x = 14
    elif x=='F':
        x = 15
if list[0]<list[1]:
    print('<')
elif list[0]>list[1]:
    print('>')
else:
    print('=')

### FIXED CODE ###

list = list(map(str,input().split()))
for x in list:
    if x=='A':
        x = 10
    elif x=='B':
        x = 11
    elif x=='C':
        x = 12
    elif x=='D':
        x = 13
    elif x=='E':
        x = 14
    elif x=='F':
        x = 15
if list[0]<list[1]:
    print('<')
elif list[0]>list[1]:
    print('>')
else:
    print('=')