Problem:
Score : 700 points

Problem Statement

We have a directed weighted graph with N vertices.
Each vertex has two integers written on it, and the integers written on Vertex i are A_i and B_i.

In this graph, there is an edge from Vertex x to Vertex y for all pairs 1 \leq x,y \leq N, and its weight is {\rm min}(A_x,B_y).

We will consider a directed cycle in this graph that visits every vertex exactly once.
Find the minimum total weight of the edges in such a cycle.

Constraints

2 \leq N \leq 10^5

1 \leq A_i \leq 10^9

1 \leq B_i \leq 10^9

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N
A_1 B_1
A_2 B_2
:
A_N B_N

Output

Print the minimum total weight of the edges in such a cycle.

Sample Input 1

3
1 5
4 2
6 3

Sample Output 1

7

Consider the cycle 1→3→2→1. The weights of those edges are {\rm min}(A_1,B_3)=1, {\rm min}(A_3,B_2)=2 and {\rm min}(A_2,B_1)=4, for a total of 7.
As there is no cycle with a total weight of less than 7, the answer is 7.

Sample Input 2

4
1 5
2 6
3 7
4 8

Sample Output 2

10

Sample Input 3

6
19 92
64 64
78 48
57 33
73 6
95 73

Sample Output 3

227

Solution in Julia (0.5.0) (judge verdict: Accepted)

parseInt(x) = parse(Int, x)
parseMap(x::Array{SubString{String},1}) = map(parseInt, x)

function main()
	n = readline() |> parseInt
	v = Array{Int}(2,n)
	for i in 1:n
		v[:,i] = readline() |> split |> parseMap
	end
	num = [i for i in 1:n]
	sy = sum(v[1,:])
	sz = sum(v[2,:])
	x = [i for i in 1:n]
	g = Array{Int}(2,2*n)
	g[1,1:n] = x
	g[1,n+1:2*n] = x
	g[2,1:n] = v[1,:]
	g[2,n+1:2*n] = v[2,:]
	g = sortcols(g,by=y->y[2])
	sw = 0
	pre = sum(g[2,1:n+1])
	if length(Set(g[1,1:n])) < n
		sw = pre - g[2,n+1]
	elseif g[1,n] != g[1,n+1]
		sw = pre-g[2,n]
	else
		sw = min(pre+g[2,n+2]-g[2,n]-g[2,n+1],pre-g[2,n-1])
	end
	print(min(sy,sz,sw))
end

main()