#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math")
#include <bits/stdc++.h>
using namespace std;
template<class t> inline t read(t &x){
	char c=getchar();bool f=0;x=0;
	while(!isdigit(c)) f|=c=='-',c=getchar();
	while(isdigit(c)) x=(x<<1)+(x<<3)+(c^48),c=getchar();
	if(f) x=-x;return x;
}
template<class t,class ...A> inline void read(t &x,A &...a){
	read(x);read(a...);
}
template<class t> inline void write(t x){
	if(x<0) putchar('-'),write(-x);
	else{if(x>9) write(x/10);putchar('0'+x%10);}
}

const int mod=1e9+7,N=1e5+5;
int ans,a[N],n,f[N],inv[N];

signed main(){
	read(n);n--;
	for(int i=1;i<=n+1;i++) read(a[i]),a[i-1]=a[i]-a[i-1];
	inv[1]=1;for(int i=2;i<=n;i++) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod;
	for(int i=1;i<=n;i++) f[i]=(f[i-1]+inv[i])%mod;
	for(int i=1;i<=n;i++) ans=(1ll*f[i]*a[i]+ans)%mod;
	for(int i=1;i<=n;i++) ans=1ll*ans*i%mod;
	write(ans);
}