#include <bits/stdc++.h>
using namespace std;
bool vis[100010];
int n, mx, a[100010], b[100010], c[100010], _m;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  vis[n + 1] = true;
  mx = n + 1;
  memset(b, 0, sizeof(b));
  for (int i = 1; i <= n; ++i) b[a[i]] ^= 1;
  int tot = 0;
  for (int i = 1; i <= n; ++i)
    if (b[a[i]]) ++tot, b[a[i]] ^= 1;
  if (tot > 1) {
    cout << 0;
    return 0;
  }
  memset(b, 0, sizeof(b));
  for (int i = n; i; --i) ++b[a[i]];
  mx = n + 1;
  for (int i = n; i; --i) {
    ++c[a[i]];
    vis[i] = vis[i + 1] & (a[i] == a[n - i + 1]);
    if (i > (n + 1) / 2) vis[i] &= (c[a[i]] * 2 <= b[a[i]]);
    if ((n & 1) && i == (n + 1) / 2) vis[i] &= (c[a[i]] * 2 - 1 == b[a[i]]);
    if (vis[i]) mx = i;
  }
  long long ans = 0;
  memset(c, 0, sizeof(c));
  for (int i = n; i; --i) {
    ans = n - i + 1;
    ++c[a[i]];
    if (i <= n / 2 && a[i] != a[n - i + 1]) break;
    if (i > (n + 1) / 2 && c[a[i]] * 2 > b[a[i]]) break;
    if ((n & 1) && i == (n + 1) / 2 && c[a[i]] * 2 - 1 != b[a[i]]) break;
  }
  memset(c, 0, sizeof(c));
  _m = n + 1;
  for (int i = n; i; --i) {
    ++c[a[i]];
    if (i <= n / 2 && a[i] != a[n - i + 1]) break;
    if (i > (n + 1) / 2 && c[a[i]] * 2 > b[a[i]]) break;
    if ((n & 1) && i == (n + 1) / 2 && c[a[i]] * 2 - 1 != b[a[i]]) break;
    _m = i;
  }
  memset(c, 0, sizeof(c));
  for (int i = 1; i <= n; ++i) {
    if (i != 1) {
      if (!vis[n - i + 2])
        ans += n - max(mx - 1, i) + 1;
      else
        ans += n - max(_m - 1, i) + 1;
    }
    if (i > (n + 1) / 2 && a[i] != a[n - i + 1]) break;
    ++c[a[i]];
    if (i <= n / 2 && c[a[i]] * 2 > b[a[i]]) break;
    if ((n & 1) && i == (n + 1) / 2 && c[a[i]] * 2 - 1 != b[a[i]]) break;
  }
  cout << ans;
  return 0;
}
