/*Bismillahir Rahmanir Rahim*///{
#include <bits/stdc++.h>
using namespace std;
using ll = long long; using ull = unsigned long long; using ld = long double;
const ll llinf = (1ll<<61)-1;
const double eps = 1e-6, ldeps = 1e-9;
struct Dbg {
static constexpr auto &os = cout;   // replace by cerr in interactive.
template<class C> static auto dud(C *x)->decltype(os << *x, 0);
template<class C> static char dud(...);
template<class C> typename enable_if<sizeof dud<C>(0)!=1, Dbg&>::type operator<<(const C &x) { os << x; return *this; }
template<class C> Dbg &dump(C b, C e) {
    *this << "\n[";
    int cur = 0;
    for (C i = b; i!=e and cur<26; i++, cur++) *this << ", "+2*(i==b) << *i;
    return *this << ']';
}
template<class C> typename enable_if<sizeof dud<C>(0)==1, Dbg&>::type operator<<(const C &x) {
    return dump(begin(x), end(x));
}
template<class C, size_t X> typename enable_if<sizeof(C)!=1, Dbg&>::type operator <<(C (&x)[X]) {
    return dump(begin(x), end(x));
}
template<class B, class C> Dbg &operator <<(const pair<B, C> &x) {
    return *this << '{' << x.first << ", " << x.second << '}';
}
template<class C, size_t Y> struct TP {
    void operator()(Dbg& os, const C &t) { TP<C, Y-1>()(os, t); os << ", " << get<Y-1>(t); }
};
template<class C> struct TP<C, 1> { void operator()(Dbg& os, const C &t) { os << get<0>(t); } };
template<class... C> Dbg& operator<<(const tuple<C...> &t) {
    os << '{', TP<decltype(t), sizeof...(C)>()(*this, t); return *this << '}';
}
Dbg &operator<<(ostream&(*x)(std::ostream&)) { os << x; return *this; }
} dbg;
void err(istringstream *iss) { delete iss; }
template<class C, class... Args> void err(istringstream *iss, const C &val, const Args &... args) {
    string name; *iss >> name; if (name.back()==',') name.pop_back();
    dbg << name << " = " << val << "; ", err(iss, args ...);
}
#define bug(args...) dbg << __LINE__ << ": ", err(new istringstream(string(#args)), args), dbg << endl
#define ASSERT(a, o, b) if (!((a) o (b))) bug(a, b), assert((a) o (b))
#define sl(a) int(strlen(a))
#define sz(a) int(a.size())
int T, Q, cn;//}
const int inf = 1000000007, mxn = 1005;

#define merge fuck

int n, a[mxn], merge[mxn], last, deletionOrder[mxn], di;
ll dp[mxn], ans = -llinf;

void deleteRange(int l, int r) {
    int x = l+(r-l)/2;
    for (int i = x; i >= l; i--) {
        deletionOrder[di++] = i;
    }
}

void printAns(int r) {
    if (merge[r]==r) {
        for (int i = 1; i <= r-1; i++) {
            deletionOrder[di++] = 1;
        }
        return;
    }
    deleteRange(merge[r]+1, r-1);
    printAns(merge[r]);
}

signed main() { ios::sync_with_stdio(0); cin.tie(NULL); cout.precision(11);
/*All the delete from side can be performed at very beginning. So we get a continuous range with no delete from side.
Replacing by sum of 2 adjacent elements replace 3 elements by 1, decrease size by 2, at the end size has to be 1, so the
continuous range has to be of odd size. We can do a dp[i] which denotes answer if the range ends at i. As we are not
allowing delete from side, i must present till the end, maybe as sum like: 123 to 4, 3 and 1 both are present as sum, or
maybe alone by deleting all previous. For staying as sum, i must be combined with dp[x] that size of [x+1, i-1] is odd.
As deletion from between is always of odd size. To print answer conveniently perform necessary deletions from right to
left, as it won't change later deletions' index, except leftMost deletions: they must be done from left to right, in
order to remain outermost when deletion, perform leftMost deletions at last from left to right.*/

    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        dp[i] = a[i], merge[i] = i;
        for (int j = i-2; j >= 1; j -= 2) {
            if (dp[i]<dp[j]+a[i]) dp[i] = dp[j]+a[i], merge[i] = j;
        }
        if (dp[i]>ans) ans = dp[i], last = i;
    }
    cout << ans << '\n';
    for (int i = n; i >= last+1; i--) {
        deletionOrder[di++] = i;
    }
    printAns(last);
    cout << di << '\n';
    for (int i = 0; i < di; i++) {
        cout << deletionOrder[i] << '\n';
    }
}

Measured memory_bytes: 256