#include <bits/stdc++.h>
using namespace std;
const int MAX = 510000;
const int MOD = 1000000007;
long long modinv(long long a, long long m) {
  long long b = m, u = 1, v = 0;
  while (b) {
    long long t = a / b;
    a -= t * b;
    swap(a, b);
    u -= t * v;
    swap(u, v);
  }
  u %= m;
  if (u < 0) u += m;
  return u;
}
int main() {
  int N;
  cin >> N;
  vector<long long> x(N, 0);
  vector<long long> l(N - 1, 0);
  vector<long long> imos_l(N - 1, 0);
  vector<long long> S(N - 1, 0);
  for (int i = 0; i < (int)(N); i++) {
    cin >> x[i];
  }
  for (int i = 0; i < (int)(N - 1); i++) {
    l[i] = x[i + 1] - x[i];
    imos_l[i] = x[i + 1] - x[0];
    imos_l[i] %= MOD;
  }
  long long sum = 0;
  for (int i = 0; i < (int)(N - 1); i++) {
    sum += imos_l[i];
    sum %= MOD;
  }
  S[0] = l[N - 2];
  for (int i = 0; i < (int)(N - 2); i++) {
    S[i + 1] = S[i] + ((i + 2) * l[N - 1 - (i + 2)]) % MOD;
    S[i + 1] %= MOD;
  }
  reverse(S.begin(), S.end());
  long long num = 1;
  for (int i = 0; i < (int)(N - 1); i++) {
    num *= (i + 1);
    num %= MOD;
  }
  vector<long long> keisuu(N - 1);
  for (int i = 0; i < (int)(N - 1); i++) {
    keisuu[i] = num * modinv(N - (i + 1), MOD);
    keisuu[i] %= MOD;
  }
  long long ans = 0;
  for (int i = 0; i < (int)(N - 1); i++) {
    ans += (keisuu[i] * S[i]) % MOD;
    ans %= MOD;
  }
  cout << ans << endl;
  return 0;
}
