output_description: Print the answer.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N
      x_1 x_2 \ldots x_N
attempt: import sys
  import math
  
  input = sys.stdin.readline
  
  
  def main():
      sc = Scan()
      N = sc.intarr()[0]
      X = sc.intarr()
      Y = X[:-1]
      last = X[-1]
      tmp = perm(Y)
  
      pp = []
      for t in tmp:
          a = t
          a.append(last)
          pp.append(a)
  
      score = 0
      for p in pp:
          for i in range(len(p) - 1):
              key = p[i]
              array = p[i + 1 :]
              near = array[-1] - key
              dist = array[-1] - key
              for j in range(len(array) - 1):
                  dist = array[j] - key
                  if dist > 0 and dist < near:
                      near = dist
              score += near
  
      ans = (score * math.factorial(N - 1) / len(pp)) % 1000000007
  
      print(int(ans))
  
  
  def perm(p):
      if len(p) == 1:
          return [p]
      else:
          s = []
          for i in range(len(p)):
              q = p[i]
              r = perm(p[:i] + p[i + 1 :])
              for t in r:
                  s.append([q] + t)
          return s
  
  
  class Scan:
  
      def intarr(self):
          num_array = list(map(int, input().split()))
          return num_array
  
      def intarr_ver(self, n):
          return [int(input()) for _ in range(n)]
  
      def strarr(self):
          line = input()
          array = line.split(" ")
          array[-1] = array[-1].strip("\n")
          return array
  
  
  def display(array):
      for a in range(len(array)):
          if len(array) - a != 1:
              print(array[a], end=" ")
          else:
              print(array[a])
  
  
  def gcd(a, b):  # 最大公約数
      while b:
          a, b = b, a % b
      return a
  
  
  def lcm(a, b):  # 最小公倍数
      return a * b // gcd(a, b)
  
  
  main()
  
problem_description: Statement
  
  There are N slimes standing on a number line. The i-th slime from the left is
  at position x_i.
  
  It is guaruanteed that 1 \leq x_1 < x_2 < \ldots < x_N \leq 10^{9}.
  
  Niwango will perform N-1 operations. The i-th operation consists of the
  following procedures:
  
    * Choose an integer k between 1 and N-i (inclusive) with equal probability.
    * Move the k-th slime from the left, to the position of the neighboring slime to the right.
    * Fuse the two slimes at the same position into one slime.
  
  Find the total distance traveled by the slimes multiplied by (N-1)! (we can
  show that this value is an integer), modulo (10^{9}+7). If a slime is born by
  a fuse and that slime moves, we count it as just one slime.
samples: [{"input": "3\n    1 2 3", "output": "5\n    \n\n  * With probability \\frac{1}{2}, the leftmost slime is chosen in the first operation, in which case the total distance traveled is 2.\n  * With probability \\frac{1}{2}, the middle slime is chosen in the first operation, in which case the total distance traveled is 3.\n  * The answer is the expected total distance traveled, 2.5, multiplied by 2!, which is 5.\n\n* * *"}, {"input": "12\n    161735902 211047202 430302156 450968417 628894325 707723857 731963982 822804784 880895728 923078537 971407775 982631932", "output": "750927044\n    \n\n  * Find the expected value multiplied by (N-1)!, modulo (10^9+7)."}]