#include <bits/stdc++.h>
using namespace std;
const int dr[4] = {-1, 0, 1, 0};
const int dc[4] = {0, 1, 0, -1};
template <typename T>
T powmod(T n, T k, T mod) {
  if (k == 0) {
    return 1;
  } else if (k % 2 == 0) {
    return powmod(n * n % mod, k / 2, mod);
  } else {
    return n * powmod(n, k - 1, mod) % mod;
  }
}
template <typename T>
T inv(T x, T mod) {
  return powmod(x, mod - 2, mod);
}
template <typename T>
T comb(T n, T k, T mod) {
  assert(0 <= k && k <= n);
  T ret = 1;
  for (T i = 0; i < k; i++) {
    ret *= n - i;
    ret %= mod;
    ret *= inv(i + 1);
    ret %= mod;
  }
  return ret;
}
int main() {
  cin.tie(0);
  ios_base::sync_with_stdio(false);
  const long long int mod = 1e9 + 7;
  int N;
  cin >> N;
  vector<long long int> X(N);
  for (int i = 0; i < (int)(N); i++) cin >> X[i];
  vector<long long int> fact(N + 1), inv_fact(N + 1), invs(N + 1);
  fact[0] = fact[1] = inv_fact[0] = inv_fact[1] = 1;
  invs[0] = invs[1] = 1;
  for (int i = 2; i < (int)(N + 1); i++) {
    fact[i] = fact[i - 1] * i % mod;
    inv_fact[i] = inv(fact[i], mod);
    invs[i] = inv<long long int>(i, mod);
  }
  long long int ans = 0;
  for (int i = 0; i < (int)(N - 1); i++) {
    for (int j = i + 1; j < (int)(N - 1); j++) {
      ans += (X[j] - X[i]) * invs[j - i + 1] % mod * invs[j - i] % mod;
      ans %= mod;
    }
    ans += (X[N - 1] - X[i]) * invs[N - i - 1] % mod;
    ans %= mod;
  }
  cout << (ans * fact[N - 1] % mod) << endl;
  return 0;
}
