#include <bits/stdc++.h>
const int N = 1005;
int n, val[N];
std::bitset<N> use;
namespace utils {
template <class T>
inline void apn(T &x, const T y) {
  x = x < y ? x : y;
}
template <class T>
inline void apx(T &x, const T y) {
  x = x > y ? x : y;
}
inline int nxi() {
  int x = 0;
  char c;
  while (((c = getchar()) > '9' || c < '0') && c != '-')
    ;
  const bool f = c == '-' && (c = getchar());
  while (x = x * 10 - 48 + c, (c = getchar()) >= '0' && c <= '9')
    ;
  return f ? -x : x;
}
}  // namespace utils
using namespace utils;
int main() {
  std::vector<int> step;
  n = nxi();
  {
    long long v[2] = {0};
    bool all_neg = 1;
    int xpos = 1;
    for (int i = 1; i <= n; ++i) {
      val[i] = nxi();
      if (val[i] > 0) v[i & 1] += val[i];
      all_neg &= val[i] < 0;
      if (val[xpos] < val[i]) xpos = i;
    }
    bool p = v[1] > v[0];
    printf("%lld\n", all_neg ? (long long)val[xpos] : v[p]);
    for (int i = 1; i <= n; ++i) {
      use[i] = (i & 1) == p && val[i] >= 0;
    }
    if (all_neg) use[xpos] = 1;
  }
  for (int x = n; n > 1; apn(x, n)) {
    for (; x && (use[x] || (x != 1 && x != n && use[x - 1] != use[x + 1])); --x)
      ;
    assert(x);
    step.push_back(x);
    const int p = 2 - (x == 1 || x == n);
    n -= p;
    use = (use >> (x + p) << x) | (use ^ (use >> x << x));
  }
  printf("%d\n", (int)step.size());
  for (std::vector<int>::iterator it = step.begin(); it != step.end(); ++it) {
    printf("%d\n", *it);
  }
  return 0;
}
