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 Go (1.6) (judge verdict: Wrong Answer)

package main

import (
	"bufio"
	"fmt"
	"math"
	"os"
	"strconv"
)

func main() {
	s := IOInitialize()
	s.Buffer([]byte{}, math.MaxInt64)
	n := Int(s)
	nums := scanNums(s, n)
	oddNums := []int{}
	oddMap := map[int]int{}
	evenNums := []int{}
	evenMap := map[int]int{}
	for i, num := range nums {
		if i%2 == 0 {
			oddNums = append(oddNums, num)
			if _, ok := oddMap[num]; ok {
				oddMap[num]++
			} else {
				oddMap[num] = 1
			}
		} else {
			evenNums = append(evenNums, num)
			if _, ok := evenMap[num]; ok {
				evenMap[num]++
			} else {
				evenMap[num] = 1
			}
		}
	}
	odd1 := 0
	odd1Cnt := 0
	odd2 := 0
	odd2Cnt := 0
	for k, v := range oddMap {
		if v > odd1Cnt {
			odd2Cnt = odd1Cnt
			odd2 = odd1
			odd1Cnt = v
			odd1 = k
			continue
		}
		if v > odd2Cnt {
			odd2Cnt = v
			odd2 = k
			continue
		}
	}

	even1 := 0
	even1Cnt := 0
	even2 := 0
	even2Cnt := 0
	for k, v := range evenMap {
		if v > even1Cnt {
			even2Cnt = even1Cnt
			even2 = even1
			even1Cnt = v
			even1 = k
			continue
		}
		if v > even2Cnt {
			even2Cnt = v
			even2 = k
			continue
		}
	}

	oddNum := odd1
	oddCnt := odd1Cnt
	evenNum := even1
	evenCnt := even1Cnt
	if oddNum == evenNum {
		if evenCnt > oddCnt {
			oddNum = odd2
			oddCnt = odd2Cnt
		} else {
			evenNum = even2
			evenCnt = even2Cnt
		}
	}
	res := len(oddNums) - oddCnt + len(evenNums) - evenCnt
	fmt.Println(res)
}

func IOInitialize() *bufio.Scanner {
	s := bufio.NewScanner(os.Stdin)
	s.Split(bufio.ScanWords)
	return s
}

func Int(s *bufio.Scanner) int {
	if !s.Scan() {
		panic("scan error")
	}

	value, err := strconv.Atoi(s.Text())
	if err != nil {
		panic("text to int error")
	}
	return value
}

func String(s *bufio.Scanner) string {
	if !s.Scan() {
		panic("scan error")
	}

	return s.Text()
}

func scanNums(s *bufio.Scanner, len int) (nums []int) {
	for i := 0; i < len; i++ {
		num := Int(s)
		nums = append(nums, num)
	}
	return
}

func scanstrings(s *bufio.Scanner, len int) (strs []string) {
	for i := 0; i < len; i++ {
		str := String(s)
		strs = append(strs, str)
	}
	return
}

/*
8
1 1 1 1 2 2 2 2
1 2 1 2 1 2 1 2
*/