#include <bits/stdc++.h>
using namespace std;
int mem[1010][1010];
int n;
int A[1010];
int go(int s, int k) {
  if (mem[s][k] != -1) return mem[s][k];
  if (k == n) {
    return mem[s][k] = A[s];
  } else if (k == n - 1) {
    return mem[s][k] = max(A[s], A[k]);
  }
  mem[s][k] = 2000000000;
  int a = go(s, k + 2) + max(A[k], A[k + 1]);
  if (a < mem[s][k]) mem[s][k] = a;
  a = go(k, k + 2) + max(A[s], A[k + 1]);
  if (a < mem[s][k]) mem[s][k] = a;
  a = go(k + 1, k + 2) + max(A[s], A[k]);
  if (a < mem[s][k]) mem[s][k] = a;
  return mem[s][k];
}
void go2(int s, int k) {
  if (k == n) {
    printf("%d\n", s + 1);
    return;
  } else if (k == n - 1) {
    printf("%d %d\n", s + 1, k + 1);
    return;
  }
  int t = mem[s][k];
  int a = go(s, k + 2) + max(A[k], A[k + 1]);
  if (t == a) {
    printf("%d %d\n", k + 1, k + 2);
    go2(s, k + 2);
    return;
  }
  a = go(k, k + 2) + max(A[s], A[k + 1]);
  if (t == a) {
    printf("%d %d\n", s + 1, k + 2);
    go2(k, k + 2);
    return;
  }
  a = go(k + 1, k + 2) + max(A[s], A[k]);
  if (t == a) {
    printf("%d %d\n", s + 1, k + 1);
    go2(k + 1, k + 2);
    return;
  }
}
int main() {
  for (int i = 0; i < 1010; ++i)
    for (int j = 0; j < 1010; j++) mem[i][j] = -1;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%d", &A[i]);
  if (n == 1) {
    printf("%d\n", A[0]);
    printf("1\n");
  } else if (n == 2) {
    printf("%d\n", max(A[0], A[1]));
    printf("1 2\n");
  } else {
    printf("%d\n", go(0, 1));
    go2(0, 1);
  }
}
