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

Solution in JavaScript (node.js v5.12) (judge verdict: Wrong Answer)

function yakusu(n) {
  var list = []
  for (var i = 1; i < n; i++) {
    if (n % i != 0) continue
    var wari = Math.floor(n / i)
    list.push(wari)
    if (wari <= 1) {
      break
    }
  }
  return list
}

function saikou(list) {
  var hash = {}
  for (var i = 0, len = list.length; i < len; i++) {
    yaku_list = yakusu(list[i])
    yaku_list.forEach((yaku) => {
      if (hash[yaku]) {
        hash[yaku] += 1
      } else {
        hash[yaku] = 1
      }
    })
  }

  var common_yakus = []
  Object.keys(hash).forEach(k => {
    if (hash[k] == list.length) {
      common_yakus.push(Number(k))
    }
  })
  if (common_yakus.length <= 0) {
    return 1
  }
  return Math.max( ...common_yakus )
}


function pr(s) {
  console.log(s)
}


(function(input) {
  'use strict';

  var N = null
  var X = null
  var xs = []
  input.split("\n").some(function(line) {
    if (N == null) {
      var list = line.split(' ')
      N = parseInt(list[0], 10)
      X = parseInt(list[1], 10)
      return false
    } else {
      xs = line.split(' ').map((x) => { return parseInt(x, 10) })
      return true
    }
  })

  // xs.length <= 1の処理
  if (xs.length <= 1) {
    pr(xs[0] - X)
    return
  }

  var abss = []
  xs.forEach((x) => {
    if (x < X) {
      abss.push(X - x)
    } else {
      abss.push(x - X)
    }
  })

  // debug
  // console.log('N')
  // console.log(N)
  // console.log('X')
  // console.log(X)
  // console.log(xs)

  console.log(saikou(abss))
})(require('fs').readFileSync('/dev/stdin', 'utf8'))