#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef long long ll;
#define mk make_pair
#define pb push_back
#define pf push_front
typedef pair<int, int> pii;
#define INF (1 << 30)
#define INFL (1ll << 60ll);
#define mod 1000000007
#define se second
#define fi first

int N, a[1010];

void owari()
{
    //printf("owari\n");
    int mx = -INFL;
    int id;
    for(int i = 0; i < N; i++){
        if(a[i] > mx){
            id = i;
            mx = a[i];
        }
    }
    printf("%lld\n", mx);
    printf("%lld\n", N - 1);
    for(int i = N - 1; i > id; i--){
        printf("%lld\n", i + 1);
    }
    for(int i = 0; i < id; i++){
        printf("1\n");
    }
    return;
}

void solve(int m)
{
    bool use[1010] = {false};
    for(int i = 0; i < N; i++){
        if(i % 2 == m && a[i] >= 0){
            use[i] = true;
        }
    }
    vector<int> ans;
    int l, r;
    for(int i = N - 1; i >= 0; i--){
        r = i;
        if(use[i])break;
        ans.pb(i + 1);
    }
    for(int i = 0; i < N; i++){
        l = i;
        if(use[i])break;
        ans.pb(1);
    }
    vector<pii> v;
    for(int i = l; i <= r; i++){
        if(use[i]){
            v.pb(mk(a[i], 1));
        }
        else {
            v.pb(mk(a[i], 0));
        }
    }
    /*printf("v.size:%lld\n", (int)v.size());
    for(int i = 0; i < (int)v.size(); i++){
        printf("v[%lld] (%lld, %lld)\n", i, v[i].fi, v[i].se);
    }*/
    while((int)v.size() > 1ll){
        for(int i = 1; i < (int)v.size() - 1; i++){
            if(v[i - 1].se == 0 && v[i].se == 1 && v[i + 1].se == 0){
                v[i - 1].se = 2;
                v[i + 1].se = 2;
                ans.pb(i + 1);
                break;
            }
            else if(v[i - 1].se == 1 && v[i].se == 0 && v[i + 1].se == 1){
                v[i - 1].se = 2;
                v[i].fi = v[i - 1].fi + v[i + 1].fi;
                v[i].se = 1;
                v[i + 1].se = 2;
                ans.pb(i + 1);
                break;
            }
            else if(v[i - 1].se == 0 && v[i].se == 0 && v[i + 1].se == 0){
                v[i - 1].se = 2;
                v[i + 1].se = 2;
                v[i].fi = v[i - 1].fi + v[i + 1].fi;
                ans.pb(i + 1);
                break;
            }
        }
        vector<pii> g;
        for(int i = 0; i < (int)v.size(); i++){
            if(v[i].se != 2){
                g.pb(v[i]);
            }
        }
        v = vector<pii>();
        for(int i = 0; i < (int)g.size(); i++){
            v.pb(g[i]);
        }
        /*printf("\n\n\n");
        for(int i = 0; i < (int)v.size(); i++){
            printf("v[%lld] (%lld, %lld)\n", i, v[i].fi, v[i].se);
        }*/
    }
    printf("%lld\n", (int)ans.size());
    for(int i = 0; i <(int)ans.size(); i++){
        printf("%lld\n", ans[i]);
    }
    return;
}

signed main()
{
    cin >> N;
    int ev = 0, od = 0;
    for(int i = 0; i < N; i++){
        cin >> a[i];
        if(i % 2){
            if(a[i] > 0){
                od += a[i];
            }
        }
        else {
            if(a[i] > 0){
                ev += a[i];
            }
        }
    }
    if(!ev && !od){
        owari();
        return 0;
    }
    if(ev < od){
        //printf("mod:1\n");
        printf("%lld\n", od);
        solve(1);
    }
    else {
        //printf("mod:0\n");
        printf("%lld\n", ev);
        solve(0);
    }


    return 0;
}

/*

18
1 1 1 1 1 1 -1 -1 -1 -1 -1 -1 1 1 1 1 1 1


*/


Measured memory_bytes: 256