#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void chmax(T &a, const T b) {
  a = max(a, b);
}
template <class T>
inline void chmin(T &a, const T b) {
  a = min(a, b);
}
template <class T>
void pp(T v, int n) {
  for (int i = 0; i < (int)(n); i++) cout << v[i] << ' ';
  cout << endl;
}
void inline TorF(bool tf, const string &trueMessage,
                 const string &falseMessage) {
  cout << (tf ? trueMessage : falseMessage) << endl;
}
void inline YESNO(bool tf) { TorF(tf, "YES", "NO"); }
void inline YesNo(bool tf) { TorF(tf, "Yes", "No"); }
const long long MOD = 1000 * 1000 * 1000 + 7;
inline void chadd(long long &a, const long long b) { a = (a + b) % MOD; }
inline long long add(const long long a, const long long b) {
  return (a + b) % MOD;
}
inline void chsub(long long &a, const long long b) { a = (a - b + MOD) % MOD; }
inline long long sub(const long long a, const long long b) {
  return (a - b + MOD) % MOD;
}
inline void chmul(long long &a, const long long b) { a = (a * b) % MOD; }
inline long long mul(const long long a, const long long b) {
  return (a * b) % MOD;
}
const int MOD_TABLE_SIZE = 1000000 + 10;
long long inv[MOD_TABLE_SIZE];
long long fac[MOD_TABLE_SIZE];
long long facinv[MOD_TABLE_SIZE];
void mod_table_init() {
  inv[1] = 1;
  for (int i = 2; i < MOD_TABLE_SIZE; i++) {
    inv[i] = MOD - (MOD / i) * inv[(int)MOD % i] % MOD;
  }
  fac[0] = facinv[0] = 1;
  for (int i = 1; i < MOD_TABLE_SIZE; i++) {
    fac[i] = (fac[i - 1] * (long long)i) % MOD;
    facinv[i] = (facinv[i - 1] * inv[i]) % MOD;
  }
}
inline long long P(int a, int b) {
  if (a < b) return 0LL;
  return fac[a] * facinv[a - b] % MOD;
}
inline long long C(int a, int b) {
  if (a < b) return 0LL;
  return (fac[a] * facinv[b] % MOD) * facinv[a - b] % MOD;
}
inline long long H(int a, int b) { return C(a + b - 1, b); }
long long dp[2048][2048];
int main() {
  mod_table_init();
  int N;
  cin >> N;
  if (N > 2000) {
    cout << 1 << endl;
    return 0;
  }
  vector<long long> x(N, 0), d(N - 1, 0);
  for (int i = 0; i < (int)(N); i++) cin >> x[i];
  for (int i = 0; i < (int)(N - 1); i++) d[i] = x[i + 1] - x[i];
  dp[0][0] = fac[N - 1];
  for (int i = 0; i < N - 1; i++) {
    for (int j = 0; j <= i; j++) {
      long long tmp = dp[i][j];
      int a = 1;
      int b = i + 1;
      int c = a + b;
      long long d = mul(tmp, inv[c]);
      chadd(dp[i + 1][j + 1], mul(d, a));
      chadd(dp[i + 1][j], mul(d, b));
    }
  }
  long long ans = 0;
  for (int i = 0; i < N - 1; i++) {
    for (int j = 0; j <= i; j++) {
      long long tmp = dp[i][j];
      chmul(tmp, j + 1);
      chmul(tmp, d[i]);
      chadd(ans, tmp);
    }
  }
  cout << ans << endl;
  return 0;
}
