#include <bits/stdc++.h>
using namespace std;
 
typedef pair<int,int> pii;
typedef long long ll;

void fastStream(){cin.tie(0);std::ios_base::sync_with_stdio(0);}

/*
  各スライムの移動距離の期待値を求めれば良い？
  あるスライムが移動する時、移動先が残っている確率を求めたい
  

 */

// O(logn)で繰り返し二乗法によりnum^p%modを計算
ll mod_pow(ll num,ll p,ll mod){
  ll mul=num;
  ll res=1;
  while(p){
    if(p%2)res=(res*mul)%mod;
    p/=2;
    mul=(mul*mul)%mod;
  }
  return res;
}
// fermerの小定理を用いてmodの割算を計算
ll div_mod(ll num,ll mod){
  return mod_pow(num,mod-2,mod);
}


const int mod = 1000000000 + 7;
int N;
ll X[100010];

int main(){

    cin >> N;
    for(int i = 0; i < N; i++) cin >> X[i];
    ll tmp = 0;
    ll sum = 0;

    for(int i = 0; i < N - 1; i++){
        ll d = (X[i + 1] - X[i]) % mod;
        (tmp += div_mod((i + 1), mod)) %= mod;
        (sum += d * tmp) %= mod;
    }
    for(ll i = 0; i < N - 1; i++){
        (sum *= (i + 1)) %= mod;
    }

    cout << sum << endl;


    return 0;
}
