#include <bits/stdc++.h>
const int MAXN = 1e5 + 5;
int n, a[MAXN];
int cnt[MAXN];
int c1[MAXN], c2, c3, k;
inline long long solve() {
  long long res = 0;
  int p = n >> 1;
  while (a[p] == a[n - p + 1]) --p;
  memset(c1, 0, sizeof(c1));
  memset(c1, 0, sizeof(c1));
  c2 = c3 = 0;
  auto add1 = [&](int x, int d) {
    if (c1[x]) --c2;
    if (c1[x] < 0) --c3;
    c1[x] += d;
    if (c1[x]) ++c2;
    if (c1[x] < 0) ++c3;
  };
  for (int i = k; i <= p - 1; ++i) add1(a[i], 1), add1(a[n - i + 1], -1);
  for (int i = p; i <= (n >> 1); ++i) {
    add1(a[i], 1);
    add1(a[n - i + 1], -1);
    if (!c2) {
      return 1ll * k * (n - i + 1);
    }
  }
  if (n & 1) {
    int p = (n + 1) >> 1;
    add1(a[p], 1);
    if (c2 == 1) return 1ll * k * (n - p + 1);
  }
  for (int i = ((n + 1) >> 1) + 1; i <= n - k + 1; ++i) {
    add1(a[i], 2);
    if (!c3) {
      return 1ll * k * (n - i + 1);
    }
  }
  return 0;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", a + i), cnt[a[i]] ^= 1;
  int sm = 0;
  for (int i = 1; i <= n; ++i) sm += cnt[i];
  if (sm > 1) {
    puts("0");
    return 0;
  }
  bool flag = 1;
  for (int i = 1; i <= n; ++i) flag &= (a[i] == a[n - i + 1]);
  if (flag) {
    printf("%lld\n", 1ll * n * (n + 1) / 2);
    return 0;
  }
  k = 1;
  while (a[k] == a[n - k + 1]) ++k;
  long long ans = solve();
  std::reverse(a + 1, a + n + 1);
  ans += solve();
  ans -= 1ll * k * k;
  printf("%lld\n", ans);
  return 0;
}
