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>
using namespace std;
typedef long long ll;
#define INF (INT_MAX / 4)
#define REP(i, n) for (ll i = 0, i##_len = (n); i < i##_len; ++i)
#define ALL(a) (a).begin(), (a).end()
/* clang-format off */
#define TIMER_S(start) chrono::system_clock::time_point start = chrono::system_clock::now();
#define TIMER_E(end) chrono::system_clock::time_point end = chrono::system_clock::now();
#define TIME(start, end) cout << static_cast<double>(chrono::duration_cast<chrono::microseconds>(end - start).count()) << "ms" << "\n";
/* clang-format on */

int main() {
  int n;
  cin >> n;
  map<int, int> evn, odd;
  REP(i, n / 2) {
    int e, o;
    cin >> e >> o;
    if (evn.count(e))
      evn.at(e)++;
    else
      evn[e] = 1;
    if (odd.count(o))
      odd.at(o)++;
    else
      odd[o] = 1;
  }
  int me = 0, mo = 0, se = 0, so = 0, ee = -1, oo = -1;
  for (auto x : evn) {
    if (x.second > me) {
      me = x.second;
      se = me;
      ee = x.first;
    }
  }
  for (auto x : odd) {
    if (x.second > mo) {
      mo = x.second;
      so = mo;
      oo = x.first;
    }
  }

  if (me == n / 2 && mo == n / 2&&ee==oo)
    cout << n / 2 << "\n";
  else if (ee == oo)
    cout << n - max(me + so, se + mo) << "\n";
  else
    cout << n - (me + mo) << "\n";
  return 0;
}