N = int(input())
X=list(map(int,input().split()))

# 一番移動量が大きくなるのはN-1番目->N-2番目(N-1番目)と選ばれるの
# 一番移動量が小さくなるのは1番目->2番目（一番目）と選ばれるの
# つまり右端の数字で移動量が決まる．例えば一番目のスライムの行き先は(N-1)通りあり(2~N)これらは等しい確率？
# ではなくない？ だってどう考えたって，右に2がある確率が高いし,N番目のがある確率は限りなく低くない？
# ２番めより先に１番目が呼ばれれば右に２があるのか．つまり1/2か？右に３があるのは2->1->3の順番かつまり1/4か?
# つまり1/2 + 1/4 + 1/8...1/2^(N-1?)か右にNがある確率は(1-(1/2+1/4+...1/2^(N-1?)))かな？
# N=2の時は別に分けないといけないのか？これ．もうよくわからん．めんどくさいのでこれで終わり
from collections import deque

X = deque(X)
kitai = 0
for i in range(N-1):  # N-1回の繰り返し
    if len(X)==2:
        kitai += (X[-1]-X[-2])
        break
    x = X.popleft()
    # xの行き先とそこに行ける確率で移動距離の期待値を計算する.
    left_num = len(X)
    left_dis = [X[k] - x for k in range(left_num)]
    kakuritsu = [1/(2**l) for l in range(1,left_num)]
    last_kakuritsu = 1 - sum(kakuritsu)
    kakuritsu.append(last_kakuritsu)
    x_kitai = [dis*kaku for (dis,kaku) in zip(left_dis,kakuritsu)]
    kitai += sum(x_kitai)
import math
print(int(kitai*math.factorial(N-1)) % (10**9 + 7))
        

    


