#include <bits/stdc++.h>
long long a[200005];
long long fac[200005];
long long tmp[200005];
long long tmp2[200005];
long long inv(long long x) {
  long long poww = 1000000007 - 2;
  long long cur = x;
  long long res = 1;
  while (poww) {
    if (poww & 1) res *= cur, res %= 1000000007;
    cur *= cur;
    cur %= 1000000007;
    poww >>= 1;
  }
  return res;
}
long long C(long long a, long long b) {
  long long res = fac[a];
  res = (res * inv(fac[b])) % 1000000007;
  res = (res * inv(fac[a - b])) % 1000000007;
  res %= 1000000007;
  return res;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%lld", &a[i]);
  fac[0] = 1;
  for (int i = 1; i <= n; i++) fac[i] = (fac[i - 1] * i) % 1000000007;
  long long res = 0;
  if (n % 4 == 1) {
    for (int i = 0; i < n; i++) {
      if (i & 1) continue;
      res += C((n - 1) / 2, i / 2) * a[i];
      res %= 1000000007;
    }
  } else if (n % 4 == 2) {
    for (int i = 0; i < n; i++) {
      res += C(n / 2 - 1, i / 2) * a[i];
      res %= 1000000007;
    }
  } else if (n % 4 == 3) {
    for (int i = 0; i < n; i++) {
      tmp[i] = C((n - 3) / 2, i / 2);
    }
    for (int i = 0; i < n; i++) {
      if (i & 1) {
        res += a[i] * (tmp[i] + (i > 0 ? tmp[i - 1] : 0));
      } else {
        res += a[i] * (tmp[i] - (i > 0 ? tmp[i - 1] : 0));
      }
      res %= 1000000007;
    }
  } else {
    for (int i = 0; i < n; i++) {
      tmp[i] = C((n - 4) / 2, i / 2);
    }
    for (int i = 0; i < n; i++) {
      if (i & 1) {
        tmp2[i] = (tmp[i] + (i > 0 ? tmp[i - 1] : 0));
      } else {
        tmp2[i] = (tmp[i] - (i > 0 ? tmp[i - 1] : 0));
      }
    }
    for (int i = 0; i < n; i++) {
      if (i & 1) {
        res += a[i] * ((i > 0 ? tmp2[i - 1] : 0) - tmp2[i]);
      } else {
        res += a[i] * ((i > 0 ? tmp2[i - 1] : 0) + tmp2[i]);
      }
      res %= 1000000007;
    }
  }
  if (res < 0) res += 1000000007;
  printf("%lld", res);
  return 0;
}
