#include<stdio.h>

#define MAX 1001

int array[MAX];
int sorted[MAX];
int swap_limit = 0;
int answer = 0;

void swap(int* a, int* b){
  int tmp = *a;
  *a = *b;
  *b = tmp;
}

void dfs(int n, int deep, int score){
  int i, j, flag = 1;

  //printf("%d, %d => %d\n", deep, score, answer);

  for(i = 0; i < n; i++){
    if(array[i] == sorted[i]){ continue; }

    for(j = i + 1; j < n; j++){
      if(array[j] == sorted[j]) { continue; }
      {
	int next_score = score + array[i] + array[j];
	flag = 0;
	
	if(next_score >= answer){
	  continue;
	}else if(deep + 1 > swap_limit){
	  continue;
	}else{
	  swap(&array[i], &array[j]);
	  
	  dfs(n, deep + 1, next_score);
	  
	  swap(&array[i], &array[j]);
	}
      }
    }
  }

  if(flag){
    if(answer > score){
      answer = score;
    }
    
    if(swap_limit > deep){
      swap_limit > deep;
    }
  }
}

int main(int argc, char* argv[]){
  int i, j, n;
  scanf("%d", &n);

  for(i = 0; i < n; i++){
    scanf("%d", &array[i]);
    sorted[i] = array[i];
  }
  
  for(i = 0; i < n; i++){
    int min = sorted[i];
    int min_pos = i;
    
    for(j = i + 1; j < n; j++){
      if(min > sorted[j]){
	min = sorted[j];
	min_pos = j;
      }
    }

    if(min_pos != i){
      swap(&sorted[i], &sorted[min_pos]);
      
      swap_limit++;
      answer += sorted[i] + sorted[min_pos];
    }
  }

  dfs(n, 0, 0);

  //printf("swap_count = %d, answer = %d", swap_limit, answer);  
  printf("%d\n", answer);

  return 0;
}