Problem:
MathJax.Hub.Config({ tex2jax: { inlineMath: [["$","$"], ["\\(","\\)"]], processEscapes: true }});

Minimum Cost Sort

You are given $n$ integers $w_i (i = 0, 1, ..., n-1)$ to be sorted in ascending order. You can swap two integers $w_i$ and $w_j$. Each swap operation has a cost, which is the sum of the two integers $w_i + w_j$. You can perform the operations any number of times.

Write a program which reports the minimal total cost to sort the given integers.

Input

In the first line, an integer $n$ is given. In the second line, $n$ integers $w_i (i = 0, 1, 2, ... n-1)$ separated by space characters are given.

Output

Print the minimal cost in a line.

Constraints

$1 \leq n \leq 1,000$

$0 \leq w_i\leq 10^4$

$w_i$ are all different

Sample Input 1

5
1 5 3 4 2

Sample Output 1

7

Sample Input 2

4
4 3 2 1

Sample Output 2

10

Solution in Ruby (judge verdict: Wrong Answer)

class Num
  include Comparable
  @@count = 0
  @@sum_weight = 0
  attr_accessor :weight, :position, :right_position
  def initialize(weight)
    @weight = weight
    @position = @@count
    @@count += 1
    @right_position = nil
  end
  
  def <=>(other)
    @weight <=> other.weight
  end
  
  def swap(other)
    @position, other.position = other.position, @position
    @@sum_weight += @weight + other.weight
  end
  
  def inspect
    return [@weight, @position, @right_position]
  end
  
  def move(other)
    if self != other
      swap(other)
      return @position == @right_position
    else
      return true
    end
  end
  
  def self.sum_weight
    return @@sum_weight
  end
end
class String
  def to_n
    return Num.new(self.to_i)
  end
end

def main
  gets
  arr = gets.split(" ").map(&:to_n)
  arr2 = arr.sort
  arr2.each_with_index{|item, idx|item.right_position = idx}
  arr2.each{|item|
    until item.move(arr2[item.position])
    end}
  puts Num.sum_weight
end
main