// 素朴な全探索
#include <fstream>
#include <iostream>
#include <cmath>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
using namespace std;
int N;
vector<int> a;

int cnt_same_clr(int i, bool incre) { // inclre = true なら i 増加
  int cnt = 0;
  int clr = a[i];
  if (incre) {
    while(i < N && a[i] == clr) {
      cnt++;
      i++;
    }
  } else {
    while(i >= 0 && a[i] == clr) {
      cnt++;
      i--;
    }
  }
  return cnt;
}

int cnt_left(int i, int clr) {
  int tmp = a[i];
  a[i] = clr; // 一時的に a[i] を変更
  int cnt = 0;
  int f = i;
  int e = i;
  if (a[i] == a[i+1])
    e++;
  else
    f++;
  while (f >= 0 && e < N && a[f] == a[e]) {
    int cnt_f = cnt_same_clr(f, false);
    int cnt_e = cnt_same_clr(e, true);
    if (cnt_f + cnt_e < 4) break;
    cnt++;
    f -= cnt_f;
    e += cnt_e;
  }
  a[i] = tmp; // 色を戻す

  // 残ったキャラ数を計算
  int left = N - (e - f - 1);
  // cout << N << " " << left << endl;
  return left;
}

int main() {
  // ifstream cin("../test.txt");
  while (true) {
    cin >> N;
    if (!N) break;
    a = vector<int>(N);
    for (int i = 0; i < N; i++) {
      cin >> a[i];
    }

    int left_min = N;
    int three = 0;
    for (int i = 1; i < N-1; i++) {

      if (a[i-1] == a[i+1] && a[i] != a[i-1]) {
        left_min = min(left_min, cnt_left(i, a[i-1]));
      }

      if (three == 2) {
        left_min = min(left_min, cnt_left(i, a[i-1]));
      }
      if (a[i] == a[i-1])
        three++;
      else
        three = 0;
    }
    three = 0;
    for (int i = N-2; i > 0; i--) {
      if (three == 2) {
        left_min = min(left_min, cnt_left(i, a[i+1]));
      }

      if (a[i] == a[i+1])
        three++;
      else
        three = 0;
    }

    cout << left_min << endl;
  }
}