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

#include <malloc.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//ABC111C
int compare_int(const void *a, const void *b) { //sort
  return *(int*) a-*(int*) b;
}
int main(void) {
  int n, k, i, cou=0, tmp, tma=0, tmb=0;
  int flg=1, maxa=0, maxa2=0, maxb=0, maxb2=0, modea=-1, modeb=-2;
  scanf("%d", &n);
  int a[n/2], b[n/2];
  for(i=0; i<n/2; i++){
    scanf(" %d %d", &a[i], &b[i]);
  }
  tmp=a[0];
  for(i=0; i<n/2; i++){
    if(tmp!=a[i]||tmp!=b[i]){
      flg=0;
      break;
    }
  }
  if(flg==1) printf("%d", n/2);
  else{
    qsort(a, n/2, sizeof(int), compare_int); //sort
    qsort(b, n/2, sizeof(int), compare_int); //sort
    tma=0, tmb=0;
    for(i=1; i<n/2; i++){
      if(a[i]==a[i-1]) tma++;
      else{
        if(maxa<=tma) maxa2=maxa, maxa=tma, modea=a[i];
        tma=0;
      }
      if(b[i]==b[i-1]) tmb++;
      else{
        if(maxb<=tmb) maxb2=maxb, maxb=tmb, modeb=b[i];
        tmb=0;
      }
    }
    if(maxa<=tma) maxa2=maxa, maxa=tma, modea=a[i-1];
    if(maxb<=tmb) maxb2=maxb, maxb=tmb, modeb=b[i-1];

    if(modea==modeb){
      if(maxa-maxa2>maxb-maxb2) printf("%d", n-maxa-maxb2-2);
      else printf("%d", n-maxa2-maxb-2);
    }else printf("%d", n-maxa-maxb-2);
  }
  //printf("\nmodea=%d modeb=%d\n", modea, modeb);
  //printf("maxa=%d maxb=%d\n", maxa, maxb);
  return 0;
}