#include <bits/stdc++.h>
using namespace std;
long long fpow(long long a, long long n, long long mod) {
  long long res = 1;
  while (n) {
    if (n & 1) {
      res = res % mod * a % mod;
    }
    a = a % mod * a % mod;
    n >>= 1;
  }
  return res % mod;
}
long long fac[200039];
long long inv[200039];
void getfacinv(int n, long long mod) {
  fac[0] = inv[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i % mod;
  inv[n] = fpow(fac[n], mod - 2, mod);
  for (int i = n - 1; i >= 1; i--) inv[i] = inv[i + 1] * (i + 1LL) % mod;
}
long long com(long long a, long long b, long long mod) {
  if (a < b) return 0;
  return fac[a] * inv[b] % mod * inv[a - b] % mod;
}
long long n;
long long a[200039];
vector<long long> ans1;
long long ans = 0;
int main() {
  scanf("%lld", &n);
  for (int i = (1); i < n + 1; i++) scanf("%lld", &a[i]);
  getfacinv(200000, 1000000007);
  if (n % 4 == 0) {
    for (int i = (1); i < n + 1; i++) {
      ans += a[i] * com((n - 2) / 2, (i - 1) / 2, 1000000007) *
             ((i & 0x1) ? (1) : (-1));
      ans += 1000000007;
      ans %= 1000000007;
    }
  } else if (n % 4 == 1) {
    for (int i = (1); i < n + 1; i++) {
      if (i & 0x1) {
        ans += a[i] * com((n - 1) / 2, (i - 1) / 2, 1000000007);
        ans %= 1000000007;
      }
    }
  } else if (n % 4 == 2) {
    for (int i = (1); i < n + 1; i++) {
      ans += a[i] * com((n - 2) / 2, (i - 1) / 2, 1000000007);
      ans %= 1000000007;
    }
  } else {
    n--;
    for (int i = (1); i < n + 1; i++)
      ans1.push_back((com((n - 2) / 2, (i - 1) / 2, 1000000007)) % 1000000007);
    n++;
    ans += (a[1] - a[n] + 1000000007) % 1000000007;
    ans += 1000000007;
    ans %= 1000000007;
    int op = 1;
    for (int i = (0); i < ans1.size() - 1; i++) {
      if (op)
        ans += (ans1[i] + ans1[i + 1]) * a[i + 2];
      else
        ans += (ans1[i + 1] - ans1[i] + 1000000007) % 1000000007 * a[i + 2];
      ans += 1000000007;
      ans %= 1000000007;
      op ^= 0x1;
    }
  }
  printf("%lld", ans);
  return 0;
}
