#include <bits/stdc++.h>
using namespace std;
const int N = 2e3 + 10;
int n, dp[N][N], a[N];
int DP(int x, int y) {
  if (dp[x][y]) return dp[x][y];
  if (y == n) {
    return max(a[x], a[y]);
  }
  if (y > n) return a[x];
  dp[x][y] = max(a[x], a[y]) + DP(y + 1, y + 2);
  dp[x][y] = min(dp[x][y], max(a[x], a[y + 1]) + DP(y, y + 2));
  dp[x][y] = min(dp[x][y], max(a[y], a[y + 1]) + DP(x, y + 2));
  return dp[x][y];
}
void print(int x, int y) {
  if (y > n) {
    printf("%d\n", x);
    return;
  }
  if (y == n) {
    printf("%d %d\n", x, y);
    return;
  }
  int ans = dp[x][y];
  if (ans == max(a[x], a[y]) + DP(y + 1, y + 2)) {
    printf("%d %d\n", x, y);
    print(y + 1, y + 2);
  } else if (ans == max(a[x], a[y + 1]) + DP(y, y + 2)) {
    printf("%d %d\n", x, y + 1);
    print(y, y + 2);
  } else if (ans == max(a[y], a[y + 1]) + DP(x, y + 2)) {
    printf("%d %d\n", y, y + 1);
    print(x, y + 2);
  }
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
  if (n == 1) {
    printf("%d\n1\n", a[1]);
    return 0;
  }
  printf("%d\n", DP(1, 2));
  print(1, 2);
  return 0;
}
