Problem:


Score : 300 points

Problem Statement

There are N cities on a number line. The i-th city is located at coordinate x_i.

Your objective is to visit all these cities at least once.

In order to do so, you will first set a positive integer D.

Then, you will depart from coordinate X and perform Move 1 and Move 2 below, as many times as you like:

Move 1: travel from coordinate y to coordinate y + D.

Move 2: travel from coordinate y to coordinate y - D.

Find the maximum value of D that enables you to visit all the cities.

Here, to visit a city is to travel to the coordinate where that city is located.

Constraints

All values in input are integers.

1 \leq N \leq 10^5

1 \leq X \leq 10^9

1 \leq x_i \leq 10^9

x_i are all different.

x_1, x_2, ..., x_N \neq X

Input

Input is given from Standard Input in the following format:

N X
x_1 x_2 ... x_N

Output

Print the maximum value of D that enables you to visit all the cities.

Sample Input 1

3 3
1 7 11

Sample Output 1

2

Setting D = 2 enables you to visit all the cities as follows, and this is the maximum value of such D.

Perform Move 2 to travel to coordinate 1.

Perform Move 1 to travel to coordinate 3.

Perform Move 1 to travel to coordinate 5.

Perform Move 1 to travel to coordinate 7.

Perform Move 1 to travel to coordinate 9.

Perform Move 1 to travel to coordinate 11.

Sample Input 2

3 81
33 105 57

Sample Output 2

24

Sample Input 3

1 1
1000000000

Sample Output 3

999999999



Sample input:
3 3
1 7 11


Sample output:
2

Submission status: Accepted

Solution code:
import subprocess
import gzip, base64, os
import stat

gz = b'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'
bin = gzip.decompress(base64.b64decode(gz))
pymain = os.path.join(os.path.dirname(__file__), 'pymain')
with open(pymain, 'wb') as f:
    f.write(bin)
os.chmod(pymain, stat.S_IXUSR | stat.S_IXGRP)
cmd = pymain
subprocess.call(cmd.split())