#include <stdio.h>
#include <string.h>
#include <algorithm>
#define INF	123456789

int N, A[11234];
int memo_A[11234];
int bound[11234][3][2];
int ans = INF;

int how_same(int num, int color) {
	int s1 = 0, s2 = 0;
	for (int i = num + 1; i < N; ++i) {
		if (A[i] == color) { ++s1; }
		else if (A[i] != -1) {
			bound[num][color][0] = i - 1;
			break;
		}
	}
	for (int i = num - 1; i >= 0; --i) {
		if (A[i] == color) { ++s2; }
		else if (A[i] != -1) {
			bound[num][color][1] = i + 1;
			break;
		}
	}
	return s1 + s2 + 1;
}

int solve(int num, int color) {
	int res = 0;
	res += how_same(num, color);
	if (res >= 4) {
		for (int i = bound[num][color][1]; i <= bound[num][color][0]; ++i) { A[i] = -1; }
		if (A[bound[num][color][1] - 1] == A[bound[num][color][0] + 1]) {
			res += solve(bound[num][color][0] + 1, A[bound[num][color][0] + 1]);
		}
		else {
			int tmp = 0;
			tmp += how_same(bound[num][color][0] + 1, A[bound[num][color][0] + 1]);
			if (tmp < 4) { tmp = 0; }
			tmp += how_same(bound[num][color][1] - 1, A[bound[num][color][1] - 1]);
			if (tmp < 4) { tmp = 0; }
		}
	}
	if (res < 4) { res = 0; }
	return res;
}

int main(void) {
	while (true) {
		scanf("%d", &N);
		if (N == 0) { break; }
		memset(bound, 0, sizeof(bound));
		ans = INF;
		for (int i = 0; i < N; ++i) { scanf("%d", &A[i]); }

		for (int i = 0; i < N; ++i) { memo_A[i] = A[i]; }
		for (int i = 1; i < N - 1; ++i) {
				for (int j = 1; j <= 3; ++j) {
					ans = std::min(ans, N - solve(i, j));
					// printf("%d", ans);
					// printf("(%d,%d)\n", i + 1, j);
					for (int k = 0; k < N; ++k) {
						// printf("%d", A[k]);
						A[k] = memo_A[k];
					}
					// printf("\n----------\n");
				}
		}
		printf("%d\n", ans);
	}
	return 0;
}