#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <stdio.h>
#include <sstream>
#include <math.h>
#include <queue>
#include <map>
#include <set>
#include <ios>     // std::left, std::right
#include <iomanip> // std::setw(int), std::setfill(char)
using namespace std;


int main(){
long long N;
cin>>N;
long long x;
long long X[N]={};
for(int i=0;i<N;++i){
  cin>>x;
  X[i]=x;
}
long long ans=0;
long long dist=0;
long long MOD=1000000007;
long long total=1;
long long Y_total[N]={};
Y_total[0]=1;
for(int i=1;i<N;++i){
  total*=i;
  total%=MOD;
  if(total<0){
    total+=MOD;
  }
  Y_total[i]=total;
}
long long Y[N]={};
Y[0]=0;
Y[1]=1;
for(int i=2;i<N;++i){
  long long tmp_total=0;
  for(int j=1;j<=i;++j){
    //j番目にiが入るときを考える
    if(i-j==0){
      tmp_total+=(1*Y_total[i-1]);
    }
    else{
    tmp_total+=(((Y_total[i-j]+Y[i-j]))*Y_total[i-1]/Y_total[i-j]);
    tmp_total%=MOD;}
  }
  if(tmp_total<0){
    tmp_total+=MOD;
  }
  Y[i]=tmp_total;
}

for(int i=1;i<N;++i){
  dist=X[i]-X[i-1];
  ans+=(dist*Y[i]*Y_total[N-1]/Y_total[i]);
  ans%=MOD;
  if(ans<0){
    ans+=MOD;
  }}

  cout<<ans<<"\n";
return 0;
}