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 itertools
  
  N = int(input())
  x = list(map(int, input().split()))
  y = []
  CONST = 10**9 + 7
  
  
  def kaijo(n):
      if n == 1:
          return n
      return n * kaijo(n - 1)
  
  
  N_1 = kaijo(N - 1)
  ans = 0
  for i in range(1, N):
      y.append(i)
  Y = list(itertools.permutations(y, len(y)))
  del_num = []
  ok_num = []
  # 操作のやつ
  # iは何回目の操作かを指す
  for i in range(1, N):
      prob = 1 / (N - i)
      # 順列Yの操作フェーズ
      for j in range(len(Y)):
          # 存在しうる順列を探す
          for k in range(N - i):
              # N-i番目の値がN-i以下ならばok、存在しうる
              # print(k)
              # print(Y[j])
              if Y[j][k] <= (N - i):
                  flag = 1
                  if k == (N - i - 1):
                      ok_num.append(j)
              else:
                  flag = 0
                  break
          if flag != 1:
              if j not in ok_num:
                  del_num.append(j)
      # 存在しない順列を削除していく
      for num in range(len(del_num)):
          del Y[del_num[num]]
  ans_list = []
  # ansを求めていく
  for i in range(len(Y)):
      Y_list = []
      prob = 1
      ans = 0
      x_list = []
      for m in range(len(x)):
          x_list.append(x[m])
      for m in range(len(y)):
          Y_list.append(Y[i][m])
      # ここから
      for j in range(len(y)):
          prob *= 1 / (N - (1 + j))
          tmp = Y_list[j] - 1
  
          ans += x_list[tmp + 1] - x_list[tmp]
          for k in range(len(y)):
              if tmp < (Y_list[k]):
                  Y_list[k] = Y_list[k] - 1
          del x_list[tmp]
      ans = ans * prob
      ans_list.append(ans)
  
  ans = 0
  for i in range(len(ans_list)):
      ans += ans_list[i]
  ans = ans * N_1
  ans = int(ans)
  ans = ans % CONST
  print(ans)
  
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)."}]