//                  //
//     Radmanシ     //
//                 //
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<stack>

using namespace std;

//#define int long long

typedef pair<int,int> pii;
typedef pair<pii,int> ppi;
typedef pair<int,pii> pip;
#define F first
#define S second

const int maxn=2e5+5,maxlog=17;
int a[maxn],b[maxn],mark[maxn];
vector<int> v,yal[maxn];
map<int,int> mp;
int ans=0;

void dfs(int now)
{
   mark[now]=1;
   if(!b[a[now]])
   {
      b[a[now]]=1;
      v.push_back(a[now]);
      ans++;
   }
   for(int i=0;i<yal[now].size();i++)
   {
      int next=yal[now][i];
      if(mark[next])
         continue;
      dfs(next);
   }
}

int32_t main()
{ 
   ios_base::sync_with_stdio(false);
   cin.tie(0),cout.tie(0);
   int n;
   cin>>n;
   for(int i=1;i<=n;i++)
      cin>>a[i];
   for(int i=1;i<=n/2;i++)
   {
      yal[i].push_back(n-i+1);
      yal[n-i+1].push_back(i);
   }
   for(int i=1;i<=n;i++)
   {
      if(mp[a[i]])
      {
         yal[i].push_back(mp[a[i]]);
         yal[mp[a[i]]].push_back(i);
         mp[a[i]]=i;
      }
      mp[a[i]]=i;
   }
   for(int i=1;i<=n;i++)
   {
      if(mark[i])
         continue;
      dfs(i);
      while(v.size())
      {
         int l=v.back();
         v.pop_back();
         b[l]=0;
      }
      ans--;
   }
   cout<<ans<<endl;
   return 0;
}
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
#pragma GCC optimize("unroll-loops")
#include<bits/stdc++.h>
#include <complex>
#include <queue>
#include <set>
#include <unordered_set>
#include <list>
#include <chrono>
#include <random>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <vector>
#include <map>
#include <unordered_map>
#include <stack>
#include <iomanip>
#include <fstream>
#include <bitset>
#include <math.h>
#include <stdlib.h>
 
using namespace std;
 
typedef long long ll;
typedef long double ld;
typedef pair<int,int> p32;
typedef pair<ll,ll> p64;
typedef pair<double,double> pdd;
typedef vector<ll> v64;
typedef vector<int> v32;
typedef vector<vector<int> > vv32;
typedef vector<vector<ll> > vv64;
typedef vector<vector<p64> > vvp64;
typedef vector<p64> vp64;
typedef vector<p32> vp32;
ll MOD = 998244353;
double eps = 1e-12;
#define forn(i,e) for(ll i = 0; i < e; i++)
#define forsn(i,s,e) for(ll i = s; i < e; i++)
#define rforn(i,s) for(ll i = s; i >= 0; i--)
#define rforsn(i,s,e) for(ll i = s; i >= e; i--)
#define ln "\n"
#define dbg(x) cout<<#x<<" = "<<x<<ln
#define pb push_back
#define fi first
#define se second
#define INF 2e9
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define sz(x) ((ll)(x).size())

class UnionFind{    
private: 
    vector<int> parent, setSize;
    int numSets;
public: 
    UnionFind(int N){
        parent.assign(N, 0), setSize.assign(N, 1), numSets = N;
        for(int i = 0; i < N; i++){parent[i] = i;}                
    }
    int findSet(int v){return (v == parent[v] ? v : parent[v] = findSet(parent[v]));}

    bool isSameSet(int v1, int v2){return (findSet(v1) == findSet(v2));}

    void unionSet(int v1, int v2){
        if(!isSameSet(v1, v2)){numSets--;
            v1 = findSet(v1);v2 = findSet(v2);
            if(setSize[v1] < setSize[v2]){swap(v1, v2);}          
            parent[v2] = v1;
            setSize[v1] += setSize[v2];      
        }
    }
    int numDisjointSets(){return numSets;}
    int sizeOfSet(int i){return setSize[findSet(i)];}    
};

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    int n;
    cin>>n;
    vector<int> in(n);
    for(int i = 0; i < n; i++){
        cin>>in[i];
    }
    int mxn = 2e5 + 5;
    UnionFind uf(mxn);

    for(int i = 0; i < n/2; i++){
        if(in[i] == in[n-i-1]) continue;
        if(in[i] != in[n-i-1]){
            uf.unionSet(in[i], in[n-i-1]);
        }                
    }
    cout<<mxn - uf.numDisjointSets()<<endl;
    return 0;
}

// unordered_map<int, int> mp;
// int parent(int cur){
//     return (mp.count(cur) ? mp[cur] = parent(mp[cur]) : cur); 
// }
// int main()
// {
//     ios_base::sync_with_stdio(0);
//     cin.tie(NULL);
//     cout.tie(NULL);

//     int n;
//     cin>>n;
//     vector<int> in(n);

//     for(int i = 0; i < n; i++){
//         cin>>in[i];
//     }
    
//     int count = 0;
//     for(int i = 0; i < n/2; i++){
//         if(in[i] == in[n-i-1]) continue;

//         // if(mp.find(in[i]) != mp.end()) in[i] = mp[in[i]];
//         // if(mp.find(in[n-i-1]) != mp.end()) in[n-i-1] = mp[in[n-i-1]];
//         // // cout<<in[i]<<" "<<in[n-i-1]<<endl;
//         // if(in[i] != in[n-i-1]){
//         //     mp[in[i]] = in[n-i-1];
//         //     if(rmp.count(in[i])){
//         //         mp[rmp[in[i]]] = in[n-i-1];
//         //     }
//         //     rmp[in[n-i-1]] = in[i];
//         //     count++;
//         // }
//         in[i] = parent(in[i]);
//         in[n-i-1] = parent(in[n-i-1]);

//         if(in[i] != in[n-i-1]){
//             mp[in[i]] = in[n-i-1];
//             count++;
//         }
//     }
//     cout<<count<<endl;
//     return 0;
// }