#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
const long long max_n = 101010;
long long fact[max_n];
bool fact_init = false;
long long pow(long long a, long long b) {
  if (b == 0) return 1;
  if (b % 2 == 1) return a * pow(a, b - 1) % MOD;
  long long d = pow(a, b / 2) % MOD;
  return d * d % MOD;
}
long long comb(long long n, long long k) {
  if (!fact_init) {
    fact[0] = 1;
    fact[1] = 1;
    for (long long i = 2; i < max_n; i++) {
      fact[i] = fact[i - 1] * i;
      fact[i] %= MOD;
    }
    fact_init = true;
  }
  long long ret = fact[n];
  ret *= pow(fact[k], MOD - 2);
  ret %= MOD;
  ret *= pow(fact[n - k], MOD - 2);
  ret %= MOD;
  return ret;
}
long long powmod(long long a, long long b) {
  if (b == 0) return 1;
  if (b & 1) {
    return a * powmod(a, b - 1) % MOD;
  } else {
    long long d = powmod(a, b / 2) % MOD;
    return d * d % MOD;
  }
}
long long sub(long long a, long long b) {
  a %= MOD, b %= MOD;
  a -= b;
  return a < 0 ? a + MOD : a;
}
long long inv(long long a) { return powmod(a, MOD - 2); }
int main() {
  cin.tie(0);
  ios::sync_with_stdio(false);
  long long n;
  cin >> n;
  vector<long long> x(n);
  for (int i = (0); i < (n); i++) cin >> x[i];
  long long _ = comb(1, 0);
  long long fct = fact[n - 1];
  long long invs[n - 1];
  invs[0] = 1;
  for (int i = (0); i < (n - 2); i++) {
    invs[i + 1] = invs[i] + inv(i + 2);
  }
  long long ans = 0;
  for (int i = (0); i < (n - 1); i++) {
    long long t = (x[i + 1] - x[i]) * fct;
    t %= MOD;
    t *= invs[i];
    t %= MOD;
    ans += t;
    ans %= MOD;
  }
  cout << ans << endl;
}
