#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
int a[1<<17], ans, n, pr[32], cnt, Max;
vector<int> v[1<<17];
bool check(){
    bool used[32];
    for(int i = 0; i <= Max; i++)
        used[i] = false;
    for(int i = 1; i <= cnt; i++)
        if(used[pr[i]] && pr[i] != pr[i-1]) return false;
        else used[pr[i]] = true;
    return true;
}
int main(){
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
        scanf("%d", a+i),
        Max = max(Max, a[i]);
    if(n <= 16){
        ans = n;
        for(int mask = 1; mask < (1<<n); mask++){
            cnt = 0;
            for(int i = n; i >= 1; i--)
                if((1<<(i-1)) & mask) pr[++cnt] = a[i];
            if(check()) ans = min(ans, n - cnt);
        }
    }
    else {
        int i = 1, br = 1, S = 0, M = 0;
        while(i <= n){
            i++;
            if(a[i] != a[i-1]) v[a[i-1]].push_back(br), br = 1;
            else br++;
        }
        for(int i = 1; i <= Max; i++)
            if(!v[i].empty()){
            sort(v[i].begin(), v[i].end());
            for(int j = 0; j < v[i].size()-1; j++){
                ans += v[i][j];
               // cout<<v[i][j]<<" "<<j<<" "<<v[i].size()<<endl;
                if(j == v[i].size()-2) M = max(M, v[i][j]);
            }
            //ans += S;
        }
        ans -= M;
    }
    printf("%d\n", ans);
    return 0;
}
