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 C++14 (GCC 5.4.1) (judge verdict: Wrong Answer)

//#include <bits/stdc++.h>
//#include <stdio.h>
#include<iostream>
#include<cstdio>
#include<bitset>
#include<algorithm>
#include<vector>
#include<list>
#include<queue>
#include<stack>
#include<string>
#include<string.h>
#include<cmath>
#include<utility>
#include<functional>
#include<map>
#include<set>
#include<cctype>
#include<fstream>


#define FOR(i, a, b) for( int i=(a);i<=(b);i++)
#define RFOR(i, a, b) for( int i=(a);i>=(b);i--)
#define LFOR(i, a, b) for( long long int i=(a);i<=(b);i++)
#define LRFOR(i, a, b) for(long long int i=(a);i>=(b);i--)
#define MOD 1000000007
#define INF 1000000000 //2000000000
#define LLINF 1000000000000000000 //9000000000000000000
#define PI 3.14159265358979
#define MAXI 7500000

using namespace std;
typedef long long int ll;
typedef pair< long long int, long long  int> P;

int dy[5] = { 0,0,1,-1,0 };
int dx[5] = { 1,-1,0,0 ,0 };

long long int n;
long long int v[100001];


int main(void) {
	long long int pos = 0;
	long long int result = 0;
	long long int point = 0;
	bool flag = false;


	cin >> n;

	vector< pair<long long int,long long int> > first(100001,make_pair(0,0)), second(100001,make_pair(0,0));
	FOR(i, 1, n) {
		cin >> v[i];
	}
	FOR(i, 1, 100000) {
		first[i].second = second[i].second = i;
	}
	pos = 0;
	for (int i = 1; i <= n; i += 2) {
		first[v[i]].first++;
	}
	for (int i = 2; i <= n; i += 2) {
		second[v[i]].first++;
	}

	sort(first.begin(), first.end(), greater<pair<long long int,long long int> >());
	sort(second.begin(), second.end(), greater<pair<long long int, long long int> >());

	/*FOR(i, 0, 4) {
		cout << first[i].first << " " << first[i].second << endl;
	}
	FOR(i, 0, 4) {
		cout << second[i].first << " " << second[i].second << endl;
	}*/

	point = n;
	if (first[0].second != second[0].second) {
		point = min(point,n - (first[0].first + second[0].first));
		//cout << "a" << endl;
		flag = true;
	}
	else if (first[1].second != second[0].second&&(first[1].first != 0 && second[0].first != 0)) {
		point = min(point, n - (first[1].first + second[0].first));
		//cout << "b" << endl;
		//flag = true;
	}
	else if (first[0].second != second[1].second&&(first[0].first != 0 && second[1].first != 0)) {
		point = min(point, n - (first[0].first + second[1].first));
		//cout << "c" << endl;
		//flag = true;
	}
	
	if(point==0&&flag==false){
		point = n / 2;
	}

	cout << point << endl;

	return 0;
}