local mod = 1000000007
local mfl = math.floor
local function bmul(x, y)
  local x0, y0 = x % 31623, y % 31623
  local x1, y1 = mfl(x / 31623), mfl(y / 31623)
  return (x1 * y1 * 14122 + (x1 * y0 + x0 * y1) * 31623 + x0 * y0) % mod
end

local function badd(x, y)
  return (x + y) % mod
end

local function bsub(x, y)
  return x < y and x - y + mod or x - y
end

local function modpow(src, pow)
  local res = 1
  while 0 < pow do
    if pow % 2 == 1 then
      res = bmul(res, src)
      pow = pow - 1
    end
    src = bmul(src, src)
    pow = mfl(pow / 2)
  end
  return res
end

local function modinv(src)
  return modpow(src, mod - 2)
end

local n = io.read("*n")
local t = {io.read("*n")}
for i = 2, n do
  t[i] = io.read("*n")
end

local curlen = 0
local ret = 0
do
  curlen = t[n - 1] - t[1]
  ret = badd(ret, bmul(curlen, modinv(2)))
end
for i_range = 2, n - 1 do
  curlen = curlen + t[n] - t[i_range] - (t[n] - t[n - i_range])
  curlen = curlen % mod
  local a = bmul(i_range, i_range + 1)
  ret = badd(ret, bmul(curlen, modinv(a)))
end
for i_range = 1, n - 1 do
  ret = badd(ret, bmul(modinv(i_range), t[n] - t[n - i_range]))
end
for i = 2, n - 1 do
  ret = bmul(ret, i)
end
print(ret)
