#include <bits/stdc++.h>
using namespace std;
const int INF = (1 << 30);
const long long INFLL = (1ll << 60);
const long long MOD = (long long)(1e9 + 7);
void mul_mod(long long& a, long long b) {
  a *= b;
  a %= MOD;
}
void add_mod(long long& a, long long b) {
  a = (a < MOD) ? a : (a - MOD);
  b = (b < MOD) ? b : (b - MOD);
  a += b;
  a = (a < MOD) ? a : (a - MOD);
}
long long rwpw(long long a, long long p = MOD - 2) {
  long long ret = 1ll;
  while (p) {
    if (p % 2) {
      mul_mod(ret, a);
    }
    mul_mod(a, a);
    p /= 2;
  }
  return ret;
}
long long x[100100], fc[100100] = {1ll}, nv[100100] = {1ll};
long long c(int n, int k) {
  long long ret = fc[n];
  mul_mod(ret, nv[k]);
  mul_mod(ret, nv[n - k]);
  return ret;
}
int main(void) {
  int n, i, j, m;
  long long ans = 0ll, tmp;
  cin >> n;
  for (i = 0; i < n; ++i) {
    fc[i + 1] = fc[i];
    mul_mod(fc[i + 1], i + 1);
    nv[i + 1] = rwpw(fc[i + 1]);
    cin >> x[i];
  }
  if (n > 2000) {
    cout << 0ll << endl;
    return 0;
  }
  for (i = 0; i < n; ++i) {
    for (j = 0; j < i; ++j) {
      if (i == n - 1) {
        tmp = c(n - 1, i - j);
        mul_mod(tmp, fc[i - j - 1]);
        mul_mod(tmp, fc[n - 1 - (i - j)]);
      } else {
        tmp = c(n - 1, i - j + 1);
        mul_mod(tmp, fc[i - j - 1]);
        mul_mod(tmp, fc[n - 1 - (i - j + 1)]);
      }
      mul_mod(tmp, x[i] - x[j]);
      add_mod(ans, tmp);
    }
  }
  cout << ans << endl;
  return 0;
}
