#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
// nPnの順列に対して処理を実行する
void foreach_permutation(int n, std::function<void(int *)> f) {

}



int main(){
    ll N;
  cin >>N;
  ll x[N];
  for(ll i=0;i<N;i++){
  cin>>x[i];
  }
  ll ans=0;
  ll flag=0;
  ll indexes[N-1];
  ll p=1000000007;
  for (ll i = 0; i < N-1; i++)indexes[i] = i;
  do {
	for(ll n=0;n<N-1;n++){
    	for(ll m=n;m<N-1;m++){
        if(indexes[n]<indexes[m]){ans=ans-x[n]+x[m];flag=1;}
          
        }
      if(flag==0){
      ans=ans+x[N-1]-x[n];}
      flag=0;
if(ans>p){ans=ans-p;}
     }   
    
  } while (std::next_permutation(indexes, indexes + N-1));
  



    
   cout << ans<< endl;
}
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
 
// nPnの順列に対して処理を実行する
void foreach_permutation(int n, std::function<void(int *)> f) {

}



int main(){
    ll N;
  cin >>N;
  ll x[N];
  for(ll i=0;i<N;i++){
  cin>>x[i];
  }
  ll ans=0;
  ll flag=0;
  ll indexes[N-1];
  ll p=1000000007;
  for (ll i = 0; i < N-1; i++)indexes[i] = i;
  do {
	for(ll n=0;n<N-1;n++){
    	for(ll m=n;m<N-1;m++){
        if(indexes[n]<indexes[m]){ans=ans-x[n]+x[m];flag=1;}
          
        }
      if(flag==0){
      ans=ans+x[N-1]-x[n];}
      flag=0;
if(ans>p){ans=ans-p;}
     }   
    
  } while (std::next_permutation(indexes, indexes + N-1));
  



    
   cout << ans<< endl;
}
