Problem:
Score : 300 points

Problem Statement

A sequence a_1,a_2,... ,a_n is said to be /\/\/\/ when the following conditions are satisfied:

For each i = 1,2,..., n-2, a_i = a_{i+2}.

Exactly two different numbers appear in the sequence.

You are given a sequence v_1,v_2,...,v_n whose length is even.
We would like to make this sequence /\/\/\/ by replacing some of its elements.
Find the minimum number of elements that needs to be replaced.

Constraints

2 \leq n \leq 10^5

n is even.

1 \leq v_i \leq 10^5

v_i is an integer.

Input

Input is given from Standard Input in the following format:

n
v_1 v_2 ... v_n

Output

Print the minimum number of elements that needs to be replaced.

Sample Input 1

4
3 1 3 2

Sample Output 1

1

The sequence 3,1,3,2 is not /\/\/\/, but we can make it /\/\/\/ by replacing one of its elements: for example, replace the fourth element to make it 3,1,3,1.

Sample Input 2

6
105 119 105 119 105 119

Sample Output 2

0

The sequence 105,119,105,119,105,119 is /\/\/\/.

Sample Input 3

4
1 1 1 1

Sample Output 3

2

The elements of the sequence 1,1,1,1 are all the same, so it is not /\/\/\/.

Solution in Pascal (FPC 2.6.2) (judge verdict: Accepted)

var
	f1,f2:array[0..100010] of longint;
	max,t:array[1..2,1..2] of longint;
	n,i,x,s:longint;
begin
	read(n);
	fillchar(f1,sizeof(f1),0);
	fillchar(f2,sizeof(f2),0);
	fillchar(max,sizeof(max),0);
	for i:=1 to n do
	begin
		read(x);
		if i mod 2=1 then
		begin 
			inc(f1[x]);
			if f1[x]>max[1,1] then
			begin
				if x<>t[1,1] then 
				begin
					max[1,2]:=max[1,1];
					t[1,2]:=t[1,1];
				end;
				max[1,1]:=f1[x];
				t[1,1]:=x;
			end
			else if f1[x]>max[1,2] then 
				begin 
					max[1,2]:=f1[x];
					t[1,2]:=x;
				end;
		end
		else
		begin 
			inc(f2[x]);
			if f2[x]>max[2,1] then
			begin
				if x<>t[2,1] then
				begin
					max[2,2]:=max[2,1];
					t[2,2]:=t[2,1];
				end;
				max[2,1]:=f2[x];
				t[2,1]:=x;
			end
			else if f2[x]>max[2,2] then 	
				begin 
					max[2,2]:=f2[x];
					t[1,2]:=x;
				end;
		end;
	end;
	s:=0;
	if (t[1,1]<>t[2,1]) then s:=max[1,1]+max[2,1]
	else if max[1,2]+max[2,1]>max[1,1]+max[2,2] then s:=max[1,2]+max[2,1]
	else s:=max[1,1]+max[2,2];
	if (t[1,1]=t[2,1]) and (max[1,2]=0) and (max[2,2]=0) then writeln(n div 2)
	else writeln(n-s);
end.